商品サンプル画像
るろうに剣心―明治剣客浪漫譚・北海道編― 10 (ジャンプコミックスDIGITAL)
商品ページ
Amazon
収益広告(自動登録)
サクラ度:△(要確認)
商品サンプル画像
あかね噺 20 (ジャンプコミックスDIGITAL)
商品ページ
Amazon
収益広告(自動登録)
サクラ度:△(要確認)
商品サンプル画像
スッキリわかるJava入門 第3版 (スッキリわかる入門シリーズ)
商品ページ
Amazon
収益広告(手動登録)
サクラ度:○(問題なし)
商品サンプル画像
勇者に敗北した魔王様は返り咲くために魔物ギルドを作ることにしました。 12巻 (バンチコミックス)
商品ページ
Amazon
収益広告(自動登録)
サクラ度:△(要確認)
商品サンプル画像
魔都精兵のスレイブ 20 (ジャンプコミックスDIGITAL)
商品ページ
Amazon
収益広告(自動登録)
サクラ度:△(要確認)
記事の概要
base64エンコードの流れ(C#)
作成日:2020-04-23
最終更新日:2020-04-23
記事の文字数:3432
情報技術
base64エンコードの流れ(C#)
概要
本記事ではbase64のエンコードの流れを記載。
最後の方にあるC#コードは、何かの参考になればと載せているだけなので、きちんと動くかはまた微妙。
base64のエンコードの流れ
base64のエンコードの流れは以下の通り。
  1. 元の文字列(abcd)をバイト型に変換
  2. バイト型から2進数に変換し、8桁になるように前0を埋め、すべて結合
  3. 2進数を6文字ごとに区切り、6文字になるように後ろに0を埋める
  4. 専用の変換表から、2進数を文字列に変換する
  5. 文字列の長さが4の倍数になるように、後ろに=を詰める

図にすると以下の通り。
画像クリックで等倍
次からはC#コードを載せています。流れが分かりやすいように冗長的に書いています。テキトーにコピペしてみてもある程度動くと思います。
1.元の文字列(abcd)をバイト型に変換

/**
* 1.元の文字列(abcd)をバイト型に変換
* (abcd)
* -> (0x61, 0x62, 0x63, 0x64)
*/
// 元の文字列をバイト型に変換
Byte[] bytes = System.Text.Encoding.UTF8.GetBytes(pTxt);

pTxtが変換元文字列
2.バイト型から2進数に変換し、8桁になるように前0を埋め、すべて結合

/**
* 2.バイト型から2進数に変換し、8桁になるように前0を埋め、すべて結合
* (0x61, 0x62, 0x63)
* -> (1100001, 1100010, 1100011, 1100100)
* -> (01100001, 01100010, 01100011, 01100100)
* -> (01100001011000100110001101100100)
*/
String unionBinaryNumTxt = "";
foreach (Byte b in bytes)
{
// バイト型から2進数に変換
String binaryNumTxt = Convert.ToString(b, 2);

// 8桁になるように前0を埋める
String paddingBinaryNumTxt = binaryNumTxt.PadLeft(8, '0');

// 結合
unionBinaryNumTxt += paddingBinaryNumTxt;
}

3.2進数を6文字ごとに区切り、6文字になるように後ろに0を埋める

/**
* 3.2進数を6文字ごとに区切り、6文字になるように後ろに0を埋める
* (01100001011000100110001101100100)
* -> (011000, 010110, 001001, 100011, 011001, 00)
* -> (011000, 010110, 001001, 100011, 011001, 000000)
*/
int splitNumber = 6;
List split6TxtList = new List();
for(int i = 0;true;i++)
{
if (unionBinaryNumTxt.Length <= i * splitNumber) // 最後まで区切ったら終了
{
break;
}

// 2進数を6文字ごとに区切る
String split6Txt = "";
if (unionBinaryNumTxt.Length < (i + 1) * splitNumber)
{
split6Txt = unionBinaryNumTxt.Substring(i * splitNumber, unionBinaryNumTxt.Length % splitNumber);
} else {
split6Txt = unionBinaryNumTxt.Substring(i * splitNumber, splitNumber);
}

// 6文字になるように後ろに0を埋める
String paddingSplit6Txt = split6Txt.PadRight(splitNumber, '0');
split6TxtList.Add(paddingSplit6Txt);
}

4.専用の変換表から、2進数を文字列に変換する

/**
* 4.専用の変換表から、2進数を文字列に変換する
* (011000, 010110, 001001, 100011, 011001, 000000)
* -> (Y, W, J, j, Z, A)
* -> (YWJjZA)
*/
// 専用の変換表を定義
IDictionary cTable = new Dictionary()
{
{"000000", "A"},
{"000001", "B"},
{"000010", "C"},
{"000011", "D"},
{"000100", "E"},
{"000101", "F"},
{"000110", "G"},
{"000111", "H"},
{"001000", "I"},
{"001001", "J"},
{"001010", "K"},
{"001011", "L"},
{"001100", "M"},
{"001101", "N"},
{"001110", "O"},
{"001111", "P"},
{"010000", "Q"},
{"010001", "R"},
{"010010", "S"},
{"010011", "T"},
{"010100", "U"},
{"010101", "V"},
{"010110", "W"},
{"010111", "X"},
{"011000", "Y"},
{"011001", "Z"},
{"011010", "a"},
{"011011", "b"},
{"011100", "c"},
{"011101", "d"},
{"011110", "e"},
{"011111", "f"},
{"100000", "g"},
{"100001", "h"},
{"100010", "i"},
{"100011", "j"},
{"100100", "k"},
{"100101", "l"},
{"100110", "m"},
{"100111", "n"},
{"101000", "o"},
{"101001", "p"},
{"101010", "q"},
{"101011", "r"},
{"101100", "s"},
{"101101", "t"},
{"101110", "u"},
{"101111", "v"},
{"110000", "w"},
{"110001", "x"},
{"110010", "y"},
{"110011", "z"},
{"110100", "0"},
{"110101", "1"},
{"110110", "2"},
{"110111", "3"},
{"111000", "4"},
{"111001", "5"},
{"111010", "6"},
{"111011", "7"},
{"111100", "8"},
{"111101", "9"},
{"111110", "+"},
{"111111", "/"}
};

// 2進数を文字列に変換する
String base64Txt = "";
foreach (String split6Txt in split6TxtList) {
base64Txt += cTable[split6Txt];
}

5.文字列の長さが4の倍数になるように、後ろに=を詰める

/**
* 5.文字列の長さが4の倍数になるように、後ろに=を詰める
* (YWJjZA)
* -> (YWJjZA==)
*/
String paddingBase64Txt = base64Txt;
if (base64Txt.Length % 4 != 0)
{
paddingBase64Txt = base64Txt.PadRight(base64Txt.Length + (4 - base64Txt.Length % 4), '=');
}

paddingBase64Txtがbase64エンコードの最終結果文字列
コメントログ
※コメントは最新50件が表示されます
コメント投稿




画面下部の「コンタクト」からも連絡可能です。
管理人ツイート
商品サンプル画像
葬送のフリーレン 15 特別短編小説付き特装版 (少年サンデーコミックス)
商品ページ
Amazon
収益広告(自動登録)
サクラ度:△(要確認)
商品サンプル画像
『ToHeart』プレミアムエディション -Steam 【特典】TVアニメ『ToHeart』Blu-ray Disc(全13話・2枚組)同梱
商品ページ
Amazon
収益広告(手動登録)
サクラ度:○(問題なし)
商品サンプル画像
ハーレム王の異世界プレス漫遊記 ~最強無双のおじさんはあらゆる種族を嫁にする~(コミック) : 5 (モンスターコミックス)
商品ページ
Amazon
収益広告(自動登録)
サクラ度:△(要確認)
商品サンプル画像
しょせん他人事ですから ~とある弁護士の本音の仕事~ 10 (黒蜜コミックス)
商品ページ
Amazon
収益広告(自動登録)
サクラ度:△(要確認)
管理人作品宣伝
VRoidポーズ集-Part03
3Dモデル / 最終更新:2024-12-03
VRoidのポーズデータ(vroidpose)集です。 写真とかによくありそうなポーズ…VRoidのポーズデータ(vroidpose)集です。 写真とかによくありそうなポーズが中心に入っています。

Boothで閲覧する利用素材等の詳細情報
ChatGPT-アイコンと名前変更
Chrome 拡張機能 / 最終更新:2025-05-29
ChatGPTのアイコン等を自分の好みに変えられます。好きなキャラと話しているような気…ChatGPTのアイコン等を自分の好みに変えられます。好きなキャラと話しているような気分になれるかもしれません。

ChromeWebストアで閲覧する利用素材等の詳細情報
作品一覧はこちら
関連ページ
JavaScriptでアナログ時計とデジタル時計を表示するコード
最終更新日:2025-05-29
概要 最近アナログ時計を使ったので、アナログ時計を表示するJavaScriptコードを載せます。 …
記事を閲覧する
three.js・three-vrm.jsを使用して、VRoidをWebページ上に表示する Part-03
最終更新日:2025-04-20
概要 three.js・three-vrm.jsを使用して、VRoidをWebページ上に表示する方…
記事を閲覧する
three.js・three-vrm.jsを使用して、VRoidをWebページ上に表示する Part-02
最終更新日:2025-04-15
概要 three.js・three-vrm.jsを使用して、VRoidをWebページ上に表示する方…
記事を閲覧する
three.js・three-vrm.jsを使用して、VRoidをWebページ上に表示する Part-01
最終更新日:2025-04-13
概要 three.js・three-vrm.jsを使用して、VRoidをWebページ上に表示する方…
記事を閲覧する
GIF / APNG(アニメーション付きPNG)ファイル解析ページ
最終更新日:2025-03-31
ファイル読込・操作 以下に調べたいファイルを読み込ませてください。 ファイル情報 カラーパレットを…
記事を閲覧する
gifler.js仕様メモ
最終更新日:2025-03-23
本ページの趣旨 「gifler.js」という、gifアニメーションをcanvasに簡単に表示できる…
記事を閲覧する
【プログラミング】実例で分かるかもしれない再帰処理
最終更新日:2024-12-15
本ページは以下動画の台本を書き起こしたものです 解説の趣旨・方向性 皆さん、こんばんは今回はプログ…
記事を閲覧する
SNSツイート一元化対応(Twitter・Misskey・Mastodon・Bluesky)-公開
最終更新日:2024-12-06
概要 SNSツイートを一元化するためのツールを作成しています(古い記事ですが、こちらのページで紹介…
記事を閲覧する
SNSツイート一元化対応(Twitter・Misskey・Mastodon・Bluesky)-Python
最終更新日:2024-10-13
概要 概要 SNSのツイートを一元化する際の備忘録というかPythonコードの共有です。 それぞれ…
記事を閲覧する
Windows-PowerShellを使用してのフォルダ内のファイル名を連番にリネームする
最終更新日:2024-10-08
以下PowerShellコードを実行することで、フォルダ内のすべてのファイルのファイル名を「0001…
記事を閲覧する
本サイトのタグ一覧
NovelAIR18VRoidWebサイト作成Webツールととモノ。アークナイツアークナイツ-ステージ攻略日記アズールレーンアズールレーン-日記ウマ娘ギャラリーゲームデビラビローグネットスラング系プログラミングホラーポケットタウン怪談気ままな日記情報技術情報技術-WebAPI知的財産権統合戦略白夜極光本サイトについて魔王スライム様がんばる!漫画
人気記事
ポケットタウン_パズル一覧
最終更新日:2025-05-02
スコア:686.9423 pt
グレーのピースの数 (Number of gray pieces):検索グレーピースの数を入力して、…
記事を閲覧する
ととモノ。3:各学科の強みを一覧化
最終更新日:2025-10-12
スコア:657.1429 pt
このページのポイントどの学科が良いかすぐに分かる各学科のどのような点が良いか分かる各役割で欲しいスキ…
記事を閲覧する
剣と魔法と学園モノ。3 前作からの変更点
最終更新日:2025-10-12
スコア:492.6209 pt
概要 もうそろそろ「ととモノ。3」のリマスターが出るので、自分自身のための振り返りと言う意味も込め…
記事を閲覧する
アークナイツ:生息演算「熱砂秘聞」の攻略メモ
最終更新日:2025-01-13
スコア:438.9888 pt
注意 本ページには攻略情報も一部含まれてるので、そういうのを見たくない人は見ない方が良いです。含ま…
記事を閲覧する
ヒカルの碁で、なぜ佐為は消えたのか
最終更新日:2025-04-21
スコア:408.1244 pt
概要 ヒカルの碁で佐為が消えた理由について、「ヒカルの才能を目覚めさせるという役割を終えたから」と…
記事を閲覧する
剣と魔法と学園モノ。3 - パーティ編成確認ツール
最終更新日:2025-09-23
スコア:399.3772 pt
ツール概要 ととモノ。3のパーティ編成を考える際に使うツールです。 攻略本や攻略wikiを参考にし…
記事を閲覧する
メイド・オブ・ザ・デッド-攻略お助け情報
最終更新日:2024-05-01
スコア:374.6947 pt
ネタバレ注意! 本ページは『メイド・オブ・ザ・デッド』の情報を記録しているものです。 攻略の参考に…
記事を閲覧する
剣と魔法と学園モノ。2G - パーティ編成確認ツール
最終更新日:2024-05-09
スコア:259.6047 pt
ツール概要 ととモノ。2Gのパーティ編成を考える際に使うツールです。 あくまでストーリークリアまで…
記事を閲覧する
最新記事
OpenAI API:Webサーチモードで参考にしてほしいURLを送っても無視されることがある問題について
最終更新日:2025-12-07
このページのポイントWebサーチでも、まずは「プロンプトだけ」を読んで「解釈」される「前提として見て…
記事を閲覧する
不思議の幻想郷 TODR:装備の印の組合せシミュレーションツール
最終更新日:2025-11-30
概要本ページは『不思議の幻想郷 TOD RELOADED.』の印考慮用のツールページです。基本事項固…
記事を閲覧する
逆転裁判3:あやめさんのナルホド君への呼び方にある3つの伏線
最終更新日:2025-11-26
このページのポイント呼び方ひとつに3つも伏線あるなんてスゲーネタバレ注意本ページには「逆転裁判3」の…
記事を閲覧する
VRoidナビゲーター:質問機能を強化しました
最終更新日:2025-11-25
このページのポイントVナビの質問機能がいま開いているページを参照するようになった必要な情報をネット上…
記事を閲覧する
商品サンプル画像
推しが武道館いってくれたら死ぬ(12)【電子限定特典ペーパー付き】 (RYU COMICS)
商品ページ
Amazon
収益広告(自動登録)
サクラ度:△(要確認)