忽略某人想要这样做的原因.... :)
我希望能够获取一些字节,将它们转换为字符串,然后再返回相同的字节数组。相同的长度和一切。
我尝试使用 ASCIIEncoder 类(仅适用于文本文件)和 Unicode Encoder 类(目前仅适用于 1024*n 大的数组。我认为这是因为每个字符的长度相同)但没有成功。
有什么简单的方法可以做到这一点?我想我可能应该编写自己的函数来做到这一点吧?
忽略某人想要这样做的原因.... :)
我希望能够获取一些字节,将它们转换为字符串,然后再返回相同的字节数组。相同的长度和一切。
我尝试使用 ASCIIEncoder 类(仅适用于文本文件)和 Unicode Encoder 类(目前仅适用于 1024*n 大的数组。我认为这是因为每个字符的长度相同)但没有成功。
有什么简单的方法可以做到这一点?我想我可能应该编写自己的函数来做到这一点吧?
使用 Base64 编码。虽然它不节省空间。
string s = Convert.ToBase64String(byteArray);
byte[] decoded = Convert.FromBase64String(s);
Base64 擅长处理此类问题。
string str = Convert.ToBase64String(inArray);
...
byte[] ourArray = Convert.FromBase64String(str);
请注意,生成的字符串(当然)将大于原始数组。
如果您知道字符串的编码(我猜它是 UTF8),那么只需使用编码类:
Encoding.UTF8.GetBytes
Encoding.UTF8.GetString
编码类可以在 System.Text 命名空间中找到
Y。
如果您不介意将每个 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 字符中,但是您必须处理奇数字节数组长度的特殊情况(这可以在最后使用额外的标记字节来完成特点)。