C#(Unity)でBase64を使ってみた

前に記事でスクリプト自体は書いたので、

今回は実際に使ってみた、というか仕様を考察します。

エディタでの動き

テスト用のコードです。

using UnityEngine;
using System.Text;

public class test : MonoBehaviour
{
   void Start()
   {
		byte[] bytes=Encoding.UTF8.GetBytes("Unity");
		
		string str=Base64Manager.BytesToBase64(bytes);
		
		Debug.Log(str);
   }
}

Base64Managerについては過去に書いたスクリプトを見てください。

Unityエディタ上で実行してみると…

画像1

VW5pdHk= と表示されました。

一応手で確認

今回変換した文字列は「Unity」です。エンコードはUTF-8です。

これらの文字を16進数、そして2進数に変換すると

U->55->01010101
n->6E->01101110
i->69->01101001
t->74->01110100
y->79->01111001

こうなります。

これらのビットを横に並べると

01010101、01101110、01101001、01110100、01111001

一回全部くっつけます。

0101010101101110011010010111010001111001

これを6ビットごとに区切ります。

010101、010110、111001、101001、011101、000111、1001

一番後ろのヤツは6ビットに満たないので"0"をいれます。

010101、010110、111001、101001、011101、000111、100100

これで基本的には終わりです。これをBase64変換表を見ながら置き換えていくと…

V、W、5、p、d、H、k、となります。

最後にある"="はパディングによるもので、文字変換は4文字ずつ行うからなんですね。

まず、V、W、5、pの4文字が変換されて、

次に、d、H、k、これだと3文字しかなく4文字に満たないので、"="を足します。

こうして、変換された文字列 VW5pdHk= ができるのですね~。

もとに戻すときは

もとに戻すときは、追加された"="は取り除かれ(VW5pdHk= が VW5pdHk になる)

この文字列のビット列の先頭から8ビットずつ取り出されます。(010101010110111001101001011101000111100100 の先頭から8ビットずつ変換される)

結果として勝手に追加した"0"は余って無視され、無事もとに戻るわけです。

いや~、よくできてるもんで。

終わり

…終わり。これ以上書くことない…。

多分、もうBase64は書くこと書ききったでしょ。

あ、あと。記事に間違ったこと書いてあってもそっと教えてください…。今回のヤツらはかなり急いで、適当に書いてしまったのでちょっと違っているかもしれないんです(保険)。

この記事が気に入ったらサポートをしてみませんか?