【C#】stringをBASE64エンコードする(ためにstringをbyte[]に変換する)
BASE64にエンコード
バイナリをBASE64エンコードするにはSystem.Security.Cryptography.ToBase64Transform
クラス内のTransformBlock
かTransformFinalBlock
メソッドを使います
それぞれ定義はこうです
public int TransformBlock( //―Blockメソッド byte[] inputBuffer, int inputOffset, int inputCount, byte[] outputBuffer, int outputOffset ); public byte[] TransformFinalBlock( //―FinalBlockメソッド byte[] inputBuffer, int inputOffset, int inputCount );
引数の上3つは両方同じですね
順に入力データとオフセット(配列のどこから入力を始めるか)と入力のサイズ
―Block
メソッドの引数下二つはエンコード結果の受け取り用配列とその サイズ オフセット
―FinalBlock
メソッドのほうは結果の受け取りを戻り値でやる感じでしょうか
さてここで気づくことが一つ
「これ入力も出力もstring
じゃなくてbyte[]
だ」ですね
ということでstring
とbyte[]
の相互変換です
string⇔byte[]
string
とbyte[]
間の変換をするにはSystem.Text.Encoding
クラス内のGetBytes
とGetString
メソッドを使います
それぞれ定義は
public virtual byte[] GetBytes(string s); public virtual string GetString(byte[] bytes);
見ればわかる簡単なやつです
入れれば、変換されて、帰ってくる
わかりずらいのがEncoding
クラスのインスタンスの取得ですね
Encoding
クラス内にstatic
なインスタンスがあるのでそれを適当に使うか、同じくstatic
なGetEncoding
メソッドを使います
public static Encoding UTF8 { get; } public static Encoding UTF7 { get; } public static Encoding UTF32 { get; } public static Encoding Unicode { get; } public static Encoding BigEndianUnicode { get; } public static Encoding ASCII { get; } public static Encoding Default { get; } public static Encoding GetEncoding(string name);
ちなみにBASE64からのデコードはSystem.Security.Cryptography.FromBase64Transform
内の同名メソッドが同じ方法で使えるので説明は省略します