C#(Unity)でBase64を使いたい

Base64をUnityで使うことになりそうなので自分用にまとめます。

スクリプトはコピペすればいつでも使えると思います。

Base64って何ぞ

Base64について。

「Wikipediaじゃねーか!」ってなりますよね。

適当にまとめると、

文字をビットに分けて6ビットごとに再度まとめる。そうして6ビットを1文字として再度出力。このとき文字列は、64文字(2^6なので)とパディングの"="の合計65文字で表現される。

って感じです。仕様的に自然と文字数は増えるのですね。

Base64について調べてみると、URLセーフだとかアンセーフだとかあるんですね。難しい。

いつでもどこでもBase64

スクリプトを掲載

using System;
using System.Text;

public class Base64Manager
{	
	public static string BytesToBase64(byte[] bytes){
		return Convert.ToBase64String(bytes);
	}
	
	public static byte[] Base64ToBytes(string characters){
		return Convert.FromBase64String(characters);
	}
	
	/*
	base64URLの場合はこうなる
	
	'+'->'-'
	'/'->'_'
	'='->消去
	*/
	
	public static string BytesToBase64Url(byte[] bytes){
		StringBuilder sb=new StringBuilder(Convert.ToBase64String(bytes));
		
		sb.Replace('+','-');
		sb.Replace('/','_');
		sb.Replace("=","");
		
		return sb.ToString();
	}
	
	public static byte[] Base64UrlToBytes(string characters){
		StringBuilder sb=new StringBuilder(characters);
		
		sb.Replace('-','+');
		sb.Replace('_','/');
		
		for(int i=characters.Length%4;i<4;i++){
			if(i==0){
				break;
			}
			
			sb.Append("=");
		}
		
		return Convert.FromBase64String(sb.ToString());
	}
	
}

自力でURLセーフにも対応できるようにしています。

ただの変換をしているだけで、再利用しやすいようにしたいのでどれもstatic関数です。そしてどれもバイト配列(もとの文字列)⇔文字列(Base64)です。

多分、使いやすいかな…?

最後に

今回はだいぶ短いです。まあ、そもそも変換だけなら既存の1行で済みますしね。このくらいの方が読むのにちょうどいいです。

また、スクリプト内でStringBuilderを使っていますが、多分ただのstringで十分です。あれは覚えたてのヤツを使いたがるアレです。

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