C#で、任意のbyte配列をstring型に直接変換、および逆変換することは可能でしょうか。
ここで言う「任意のbyte配列」とは、必ずしも文字コードに従っていない任意のバイナリデータのことです。
文字コードを介すと下のコードのようになってしまい、きちんと変換されません。UTF8以外でも同様です。
なぜこんなおかしなことをしたいのかというと、現在UnityでAndroidアプリの開発を行っているのですが、
JavaライブラリからUnityの関数を呼ぶとき、引数にstringしか使えないためです。
(UnityPlayer#UnitySendMessage(string, string, string);)
Base64で変換して渡すことも考えましたが、もし直接変換する方法があればと思い、質問させていただきました。
よろしくお願いいたします。
C#
1using System; 2public class Test { 3 public static void Main() { 4 5 /* 任意のbyte配列 */ 6 byte[] bin_data = new byte[]{ 0x12, 0x34, 0x7F, 0x80, 0xAB, 0xCD }; 7 Console.WriteLine("bin_data = " + toString(bin_data)); 8 // [出力] bin_data = 12 34 7F 80 AB CD 9 10 /* 任意のbyte配列をstringに変換した後、逆変換 */ 11 byte[] conv_data = StringToBytes(BytesToString(bin_data)); 12 Console.WriteLine("conv_data = " + toString(conv_data)); 13 // [出力] conv_data = 12 34 7F EF BF BD EF BF BD EF BF BD ←bin_dataと同じにしたい!!! 14 15 } 16 17 /* byte配列→string */ 18 static string BytesToString(byte[] bytes) { 19 return System.Text.Encoding.UTF8.GetString (bytes); 20 } 21 /* string→byte配列 */ 22 static byte[] StringToBytes(string str) { 23 return System.Text.Encoding.UTF8.GetBytes (str); 24 } 25 /* byte配列の文字列表現(適当です!) */ 26 static string toString(byte[] bytes) { 27 string ret = ""; 28 foreach (byte b in bytes) { 29 ret += b.ToString ("X2") + " "; 30 } 31 return ret; 32 } 33}

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/10/14 13:32