2

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

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

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

有什么简单的方法可以做到这一点?我想我可能应该编写自己的函数来做到这一点吧?

4

4 回答 4

5

使用 Base64 编码。虽然它不节省空间。

string s = Convert.ToBase64String(byteArray);
byte[] decoded = Convert.FromBase64String(s);
于 2009-12-31T21:54:05.867 回答
2

Base64 擅长处理此类问题。

string str = Convert.ToBase64String(inArray);
...
byte[] ourArray = Convert.FromBase64String(str);

请注意,生成的字符串(当然)将大于原始数组。

于 2009-12-31T21:53:49.923 回答
1

如果您知道字符串的编码(我猜它是 UTF8),那么只需使用编码类:

Encoding.UTF8.GetBytes
Encoding.UTF8.GetString

编码类可以在 System.Text 命名空间中找到

Y。

于 2009-12-31T22:00:03.133 回答
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 字符中,但是您必须处理奇数字节数组长度的特殊情况(这可以在最后使用额外的标记字节来完成特点)。

于 2009-12-31T22:38:52.783 回答