C LANGUAGE TECHNOLOGY

【C言語】Base64のエンコードとデコード【イーサリアムで利用】【a64l/l64a関数】

2021年10月28日

悩んでいる人

C言語でBase64のエンコードとデコードを教えて!

こういった悩みにお答えします.

本記事の信頼性

  • リアルタイムシステムの研究歴12年.
  • 東大教員の時に,英語でOS(Linuxカーネル)の授業.
  • 2012年9月~2013年8月にアメリカのノースカロライナ大学チャペルヒル校(UNC)コンピュータサイエンス学部で客員研究員として勤務.C言語でリアルタイムLinuxの研究開発.
  • プログラミング歴15年以上,習得している言語: C/C++PythonSolidity/Vyper,Java,Ruby,Go,Rust,D,HTML/CSS/JS/PHP,MATLAB,Verse(UEFN), Assembler (x64,ARM).
  • 東大教員の時に,C++言語で開発した「LLVMコンパイラの拡張」,C言語で開発した独自のリアルタイムOS「Mcube Kernel」GitHubにオープンソースとして公開
  • 2020年1月~現在はアメリカのノースカロライナ州チャペルヒルにあるGuarantee Happiness LLCのCTOとしてECサイト開発やWeb/SNSマーケティングの業務.2022年6月~現在はアメリカのノースカロライナ州チャペルヒルにあるJapanese Tar Heel, Inc.のCEO兼CTO.
  • 最近は自然言語処理AIイーサリアムに関する有益な情報発信に従事.
    • (AI全般を含む)自然言語処理AIの論文の日本語訳や,AIチャットボット(ChatGPT,Auto-GPT,Gemini(旧Bard)など)の記事を50本以上執筆.アメリカのサンフランシスコ(広義のシリコンバレー)の会社でプロンプトエンジニア・マネージャー・Quality Assurance(QA)の業務委託の経験あり.
    • (スマートコントラクトのプログラミングを含む)イーサリアムや仮想通貨全般の記事を200本以上執筆.イギリスのロンドンの会社で仮想通貨の英語の記事を日本語に翻訳する業務委託の経験あり.

こういった私から学べます.

C言語を独学で習得することは難しいです.

私にC言語の無料相談をしたいあなたは,公式LINE「ChishiroのC言語」の友だち追加をお願い致します.

私のキャパシティもあり,一定数に達したら終了しますので,今すぐ追加しましょう!

友だち追加

独学が難しいあなたは,元東大教員がおすすめするC言語を学べるオンラインプログラミングスクール5社で自分に合うスクールを見つけましょう.後悔はさせません!

Base64

Base64とは,バイナリデータをテキストデータに変換するエンコード方式です.

テキストデータには,以下の65文字を利用します.

  • A-Z:26文字
  • a-z:26文字
  • 0-9:10文字
  • +,/:2文字
  • =:1文字(パディングの記号)

Base64のエンコードの手順は以下になります.

  1. 元データを6ビットずつに分割します.(6ビットに満たない分は0を追加して6ビットにします.)
  2. 各6ビットの値を以下の変換表を使って4文字ずつ変換します.(4文字に満たない分は=記号を追加して4文字にします.)

10進数2進数文字10進数2進数文字
0000000A32100000g
1000001B33100001h
2000010C34100010i
3000011D35100011j
4000100E36100100k
5000101F37100101l
6000110G38100110m
7000111H39100111n
8001000I40101000o
9001001J41101001p
10001010K42101010q
11001011L43101011r
12001100M44101100s
13001101N45101101t
14001110O46101110u
15001111P47101111v
16010000Q48110000w
17010001R49110001x
18010010S50110010y
19010011T51110011z
20010100U521101000
21010101V531101011
22010110W541101102
23010111X551101113
24011000Y561110004
25011001Z571110015
26011010a581110106
27011011b591110117
28011100c601111008
29011101d611111019
30011110e62111110+
31011111f63111111/

Base64のエンコードは仮想通貨イーサリアムで利用されています(go-ethereum/cmd/devp2p/README.md).

イーサリアムを知りたいあなたはこちらからどうぞ.

C言語でBase64のエンコードとデコードのコード

C言語でBase64のエンコードとデコードのコードは以下になります.

実行結果は以下になります.

こちらのBase64のエンコード・デコード変換ツールと同じ結果になるか確認してみましょう.

参考:stdlib.hのa64l/l64a関数

stdlib.hのa64l/l64a関数は,32ビットlong整数とリトルエンディアンbase-64ASCII文字列(長さ0 〜 6)の間の変換を行います.

a64l関数の引数の文字列が7文字以上の場合,最初の6バイトが利用されます.

long型が32ビットより大きい場合,l64a関数はvalueの下位32ビットのみを利用し,a64l関数は32ビットの結果を符号拡張します.

base-64システムで利用される64個の文字は以下の通りです.

※先述した一般的なBase64とは異なることに注意して下さい.

  • '.':0
  • '/':1
  • 0-9:2-11
  • A-Z:12-37
  • a-z:38-63

a64l/l64a関数の使い方は以下になります.

実行結果は以下になります.

まとめ

C言語でBase64のエンコードとデコードを紹介しました.

Base64はバイナリデータをテキストデータに変換する時に有用です!

ビットコインやリップルで利用されるBase58を知りたいあなたはこちらからどうぞ.

C言語を独学で習得することは難しいです.

私にC言語の無料相談をしたいあなたは,公式LINE「ChishiroのC言語」の友だち追加をお願い致します.

私のキャパシティもあり,一定数に達したら終了しますので,今すぐ追加しましょう!

友だち追加

独学が難しいあなたは,元東大教員がおすすめするC言語を学べるオンラインプログラミングスクール5社で自分に合うスクールを見つけましょう.後悔はさせません!

-C LANGUAGE, TECHNOLOGY
-, , , , ,