我想将包含不可打印字符的字节数组转换为我的应用程序的字符串。当我转换回字节数组时,数组的内容应该保持相同,我发现ASCII / Unicode / UTF8并不总能给我正确的解决方案吗?
E.g
byte[] bytearray ={ 147, 35, 44, 18, 255, 104, 206, 72 ,69};
string str = System.Text.Encoding.ASCII.GetString(bytearray);
bytearray = System.Text.Encoding.ASCII.GetBytes(str);
在上面的例子中,我发现字节数组包含
{ 63, 35, 44, 18, 63, 104, 63, 72 ,69}.
请帮帮我。
答案 0 :(得分:8)
看看Convert.ToBase64String方法。它会将字节数组转换为字符串。请记住,编码为字符串,数据将占用比原始字节数组更多的空间。
public static string ToBase64String(
byte[] inArray
)
然后,您可以使用FromBase64String
public static byte[] FromBase64String(
string s
)
答案 1 :(得分:1)
我认为你的问题是你使用了错误的编码。 ASCII定义了128个字符(http://en.wikipedia.org/wiki/ASCII),所以永远不会给你128以上的字节。
如果您希望回程成功,您需要找到正确的编码并使用它。
我误解了这个问题。我的答案只有在字节数组是一个编码的字符串时才有意义 - 我没有读过那些说它是不可打印的字符的位等等.Nikola的答案就是那个。 :)
答案 2 :(得分:0)
当字符串不必是人类可读的非可释放字符版本时,确实将其转换为base64(UUEncode / XXEncode)确实可以解决问题。
答案 3 :(得分:0)
您使用ASCI编码将字节数组转换为字符串,请记住ASCI是一个7位协议,编码将剥离第8位或回退到特定值(文档似乎不清楚它是做什么的!)
引用MSDN;
在.NET Framework 2.0版之前,.NET Framework允许 忽略第8位欺骗。从.NET Framework开始 2.0,非ASCII码点在解码过程中回落。