商品サンプル画像
オーストラリア 変換プラグ O型 海外旅行用 変換アダプター 1.5m延長コード付き|AC差込口4個+USBポート5個(USB-C×3)|オーストラリア/ニュージーランド/中国/アルゼンチンなどの国に対応
商品ページ
Amazon
収益広告(自動登録)
サクラ度:○(問題なし)
商品サンプル画像
剣と魔法と学園モノ。2 ザ・コンプリートガイド
商品ページ
Amazon
収益広告(手動登録)
サクラ度:○(問題なし)
商品サンプル画像
司法試験&予備試験 体系別 短答過去問題集 刑法 第3版 司法試験&予備試験 体系別短答過去問題集シリーズ
商品ページ
Amazon
収益広告(手動登録)
サクラ度:○(問題なし)
商品サンプル画像
[山善] こたつ用取替えヒーター こたつ ヒーター ユニット 石英管 中間スイッチ付き NYH-300S
商品ページ
Amazon
収益広告(自動登録)
サクラ度:○(問題なし)
商品サンプル画像
LED電球 E26口金 電球色 60W形相当 広配光 850lm 高演色性 一般電球 PSE認証済み 密閉器具対応 断熱材施工器具対応 非調光 6個パック
商品ページ
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件が表示されます
コメント投稿




画面下部の「コンタクト」からも連絡可能です。
管理人ツイート
商品サンプル画像
【小型・1台多役】眉毛シェーバー メンズ レディース まゆげ シェーバー 両面ブレード LCD電量表示 電動 眉毛カッター 眉毛/顔/産毛剃りType-c充電 眉毛カッター 女性 まゆげそり フェイスシェーバー 刃先は水洗い可能 顔そり 多機能 男女
商品ページ
Amazon
収益広告(自動登録)
サクラ度:△(要確認)
商品サンプル画像
Mizuoto 加湿器 小型 卓上 アロマディフューザー 大容量 25h連続稼働 LEDライト タイマー 静音 25dB 除菌 おしゃれ 6畳 超音波式 省エネ お手入れ簡単 コンパクト 寝室 オフィス デスク リビング トレイ 空焚き防止 乾燥対策
商品ページ
Amazon
収益広告(自動登録)
サクラ度:△(要確認)
商品サンプル画像
BRUNO ブルーノ コンパクトホットプレート 焼肉 本体 プレート2種(たこ焼き 平面) おしゃれ かわいい これ1台 蓋 ふた付き 1200w 温度調節 洗いやすい 1人 2人 3人用 小型 小さいサイズ 少人数用 一人暮らし ブラック 黒 BO
商品ページ
Amazon
収益広告(自動登録)
サクラ度:△(要確認)
商品サンプル画像
【2025年9月発売】Xiaomi コードレス掃除機 P30 22,000Pa強力吸引 軽量860g 40分連続稼働 5段階精密フィルター 2WAYブラシノズル付き 車内&隙間掃除対応 USB Type-C充電 大容量バッテリー 最大24ヶ月保証
商品ページ
Amazon
収益広告(自動登録)
サクラ度:○(問題なし)
管理人作品宣伝
ジグソーパズル風パズルゲーム
Webサイト / 最終更新:2025-01-23
ジグソーパズル風パズルゲームです。自分で画像を設定してパズルにできます。…ジグソーパズル風パズルゲームです。自分で画像を設定してパズルにできます。

HPで閲覧する利用素材等の詳細情報
【アークナイツ】獣歌う廃音楽堂: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知的財産権統合戦略白夜極光本サイトについて魔王スライム様がんばる!漫画
人気記事
剣と魔法と学園モノ。3 前作からの変更点
最終更新日:2025-10-12
スコア:2658.3674 pt
概要 もうそろそろ「ととモノ。3」のリマスターが出るので、自分自身のための振り返りと言う意味も込め…
記事を閲覧する
剣と魔法と学園モノ。3 - パーティ編成確認ツール
最終更新日:2025-09-23
スコア:1215.6194 pt
ツール概要 ととモノ。3のパーティ編成を考える際に使うツールです。 攻略本や攻略wikiを参考にし…
記事を閲覧する
ポケットタウン_パズル一覧
最終更新日:2025-05-02
スコア:763.3594 pt
グレーのピースの数 (Number of gray pieces):検索グレーピースの数を入力して、…
記事を閲覧する
メイド・オブ・ザ・デッド-攻略お助け情報
最終更新日:2024-05-01
スコア:539.1849 pt
ネタバレ注意! 本ページは『メイド・オブ・ザ・デッド』の情報を記録しているものです。 攻略の参考に…
記事を閲覧する
剣と魔法と学園モノ。2G - パーティ編成確認ツール
最終更新日:2024-05-09
スコア:533.4596 pt
ツール概要 ととモノ。2Gのパーティ編成を考える際に使うツールです。 あくまでストーリークリアまで…
記事を閲覧する
剣と魔法と学園モノ。3 - 各学科のステータス比較
最終更新日:2025-03-16
スコア:290.1132 pt
概要 ととモノ。3では各学科にステータス補正がありますが、「割合での補正」と「固定値での補正」が混…
記事を閲覧する
地獄先生ぬ~べ~で好きな切ないエピソード
最終更新日:2025-07-08
スコア:208.9877 pt
概要 初代というべきか、週刊少年ジャンプで連載されていた地獄先生ぬ~べ~の切ないエピソードの中で好…
記事を閲覧する
ロックマンエグゼ3-バグのかけら必要数まとめ-
最終更新日:2023-05-14
スコア:180.0357 pt
バグのかけら必要数 必要数 これぐらいあれば足りるはず。 コレクト要素に関わる部分だけなら、ギガチ…
記事を閲覧する
最新記事
ととモノ。3:各学科の強みを一覧化
最終更新日:2025-10-12
このページのポイントどの学科が良いかすぐに分かる各学科のどのような点が良いか分かる各役割で欲しいスキ…
記事を閲覧する
剣と魔法と学園モノ。3 前作からの変更点
最終更新日:2025-10-12
概要 もうそろそろ「ととモノ。3」のリマスターが出るので、自分自身のための振り返りと言う意味も込め…
記事を閲覧する
逆転裁判1:真犯人まとめと悪質度
最終更新日:2025-09-30
概要 逆転裁判1(蘇る込み)に出てくる犯人たちを、やったことや動機なんかを整理して「悪質度」を点数…
記事を閲覧する
剣と魔法と学園モノ。3 - パーティ編成確認ツール
最終更新日:2025-09-23
ツール概要 ととモノ。3のパーティ編成を考える際に使うツールです。 攻略本や攻略wikiを参考にし…
記事を閲覧する
商品サンプル画像
LumenOrbit 衣類乾燥機【2025新モデル・1年間のメーカー保証】ポータブル 乾燥機 小型 電源コード式 リモコン付き 2段階風速 タイマー8段階乾燥自動停止 寮/アパート/出張/旅行/車中泊/オフィス対応 LOD-01F
商品ページ
Amazon
収益広告(自動登録)
サクラ度:△(要確認)