忽略有人想要这样做的原因.... :)
我希望能够获取一些字节,将它们转换为字符串,然后再转回相同的字节数组。相同的长度和一切。
我尝试过使用ASCIIEncoder类(仅适用于文本文件)和Unicode编码器类(目前仅适用于1024 * n大的数组。我认为这是因为每个字符的长度相等)但没有成功
有没有简单的方法可以做到这一点?我想我应该写自己的功能呢?
答案 0 :(得分:5)
使用Base64编码。但它并不节省空间。
string s = Convert.ToBase64String(byteArray);
byte[] decoded = Convert.FromBase64String(s);
答案 1 :(得分:2)
Base64非常适合这样的问题。
string str = Convert.ToBase64String(inArray);
...
byte[] ourArray = Convert.FromBase64String(str);
请注意,结果字符串(当然)比原始数组更大。
答案 2 :(得分:1)
如果您知道字符串的编码(我猜它是UTF8),那么只需使用编码类:
Encoding.UTF8.GetBytes
Encoding.UTF8.GetString
可以在System.Text命名空间中找到编码类
ý。
答案 3 :(得分:1)
如果你不介意将每个8位字节存储到16位字符所需的空间加倍,并且你不需要字符串由可打印字符组成,你可以直接这样做:
string BytesToString(byte[] b)
{
StringBuilder s;
s = new StringBuilder(b.Length);
for (int i = 0; i < b.Length; i++)
s[i] = (char) b[i]; // Cast not really needed
return s.ToString();
}
byte[] StringToBytes(string s)
{
byte[] b;
b = new byte[s.Length];
for (int i = 0; i < b.Length; i++)
b[i] = (byte) s[i];
return b;
}
您可以编写更精细的代码将两个8位字节打包到每个16位Unicode字符中,但是您必须处理奇数字节数组长度的特殊情况(可以使用额外的标记字节来完成)在最后一个角色)。