商品サンプル画像
LUPIN THE IIIRD 銭形と2人のルパン
商品ページ
Amazon
収益広告(自動登録)
※Amazonレビュー要確認
商品サンプル画像
Dこそオンリーワン
商品ページ
Amazon
収益広告(自動登録)
※Amazonレビュー要確認
商品サンプル画像
美男高校地球防衛部ETERNAL LOVE!
商品ページ
Amazon
収益広告(自動登録)
※Amazonレビュー要確認
商品サンプル画像
劇場版「鬼滅の刃」無限列車編
商品ページ
Amazon
収益広告(自動登録)
※Amazonレビュー要確認
商品サンプル画像
ドラゴンキーパーVSデスメシア
商品ページ
Amazon
収益広告(自動登録)
※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件が表示されます
コメント投稿




画面下部の「コンタクト」からも連絡可能です。
管理人ツイート
商品サンプル画像
イナズマイレブン・ザ・ムービー 2025
商品ページ
Amazon
収益広告(自動登録)
※Amazonレビュー要確認
商品サンプル画像
劇場版「鬼滅の刃」無限列車編
商品ページ
Amazon
収益広告(自動登録)
※Amazonレビュー要確認
商品サンプル画像
戦隊大失格
商品ページ
Amazon
収益広告(自動登録)
※Amazonレビュー要確認
商品サンプル画像
D.C.Ⅱ.S.S.~ダ・カーポⅡセカンドシーズン~(TV番組)
商品ページ
Amazon
非収益広告(手動登録)
管理人作品宣伝
VRoidポーズ集-Part03
3Dモデル / 最終更新:2024-12-03
VRoidのポーズデータ(vroidpose)集です。 写真とかによくありそうなポーズ…VRoidのポーズデータ(vroidpose)集です。 写真とかによくありそうなポーズが中心に入っています。

Boothで閲覧する利用素材等の詳細情報
【アークナイツ】獣歌う廃音楽堂:LT-6 ヴィヴィアナ
動画 / 最終更新:2025-06-10
真なる強者にギミックなど不要…真なる強者にギミックなど不要

YouTubeで閲覧するニコニコ動画で閲覧する利用素材等の詳細情報
作品一覧はこちら
関連ページ
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
スコア:830.3878 pt
グレーのピースの数 (Number of gray pieces):検索グレーピースの数を入力して、…
記事を閲覧する
メイド・オブ・ザ・デッド-攻略お助け情報
最終更新日:2024-05-01
スコア:508.4840 pt
ネタバレ注意! 本ページは『メイド・オブ・ザ・デッド』の情報を記録しているものです。 攻略の参考に…
記事を閲覧する
地獄先生ぬ~べ~で好きな切ないエピソード
最終更新日:2025-07-08
スコア:215.1773 pt
概要 初代というべきか、週刊少年ジャンプで連載されていた地獄先生ぬ~べ~の切ないエピソードの中で好…
記事を閲覧する
ゲーム『イカれた狩場の看板娘』の紹介・レビュー
最終更新日:2025-05-01
スコア:179.5203 pt
記事概要 イカれたゲームを紹介するぜ! イカれた狩場の看板娘! 以上だ! ちなみにそんなイカれてな…
記事を閲覧する
剣と魔法と学園モノ。2G - パーティ編成確認ツール
最終更新日:2024-05-09
スコア:171.9205 pt
ツール概要 ととモノ。2Gのパーティ編成を考える際に使うツールです。 あくまでストーリークリアまで…
記事を閲覧する
黒バス:キセキの世代級の人たちの技一覧
最終更新日:2024-07-21
スコア:114.8438 pt
黒バスのキセキの世代級の人たちの技一覧です 概要 黒バスのキセキの世代級の人たちの技を記載したもの…
記事を閲覧する
アークナイツ-常設商品-理性換算
最終更新日:2024-04-28
スコア:104.5333 pt
概要 "常設商品でお得な商品はどれか"というのを理性に換算して一覧化したものとなります。 絶対的に…
記事を閲覧する
本サイトについて
最終更新日:2025-07-10
スコア:99.0103 pt
本サイトの概要 概要 個人ブログのようなものです。とくにジャンルはありません。 本サイト内の情報に…
記事を閲覧する
最新記事
地獄先生ぬ~べ~新アニメで設定変わったところ(3話まで)
最終更新日:2025-07-13
概要 地獄先生ぬ~べ~の新アニメが2025-07-02(木)よりやっていますが、そこで設定が変わっ…
記事を閲覧する
本サイトについて
最終更新日:2025-07-10
本サイトの概要 概要 個人ブログのようなものです。とくにジャンルはありません。 本サイト内の情報に…
記事を閲覧する
地獄先生ぬ~べ~で好きな切ないエピソード
最終更新日:2025-07-08
概要 初代というべきか、週刊少年ジャンプで連載されていた地獄先生ぬ~べ~の切ないエピソードの中で好…
記事を閲覧する
htmlタグ混在のテキストをhtmlタグとプレーンテキストで分けるJavaScriptコード
最終更新日:2025-06-20
概要 「よくある質問は a href="/" こ span ち /span ら /a です」 とい…
記事を閲覧する
商品サンプル画像
司法試験&予備試験 体系別 短答過去問題集 刑法 第3版 司法試験&予備試験 体系別短答過去問題集シリーズ
商品ページ
Amazon
収益広告(手動登録)