Byte [] to String to Byte [] - 怎么做?

时间:2009-12-31 21:51:03

标签: c# string byte unicode-string

忽略有人想要这样做的原因.... :)

我希望能够获取一些字节,将它们转换为字符串,然后再转回相同的字节数组。相同的长度和一切。

我尝试过使用ASCIIEncoder类(仅适用于文本文件)和Unicode编码器类(目前仅适用于1024 * n大的数组。我认为这是因为每个字符的长度相等)但没有成功

有没有简单的方法可以做到这一点?我想我应该写自己的功能呢?

4 个答案:

答案 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字符中,但是您必须处理奇数字节数组长度的特殊情况(可以使用额外的标记字节来完成)在最后一个角色)。