C# 字节[]到字符串再到字节[]--如何操作?

C# 字节[]到字符串再到字节[]--如何操作?,c#,string,byte,unicode-string,C#,String,Byte,Unicode String,忽略某人希望这样做的原因……) 我希望能够获取一些字节,将它们转换为字符串,然后稍后返回到相同的字节数组。同样的长度和一切 我尝试过使用AscienceOrder类(仅适用于文本文件)和Unicode编码器类(目前仅适用于1024*n大的数组。我认为这是因为每个字符的长度相等),但没有成功 有什么简单的方法可以做到这一点吗?我想我应该编写自己的函数来实现这一点,嗯?非常适合处理此类问题 string str = Convert.ToBase64String(inArray); ... byte[

忽略某人希望这样做的原因……)

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

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

有什么简单的方法可以做到这一点吗?我想我应该编写自己的函数来实现这一点,嗯?

非常适合处理此类问题

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

请注意,结果字符串(当然)将比原始数组大。

使用Base64编码。但这并不节省空间

string s = Convert.ToBase64String(byteArray);
byte[] decoded = Convert.FromBase64String(s);

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

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;
}
string BytesToString(字节[]b)
{
架线工;
s=新的StringBuilder(b.长度);
for(int i=0;i

您可以编写更复杂的代码,将两个8位字节打包到每个16位Unicode字符中,但随后您必须处理奇数字节数组长度的特殊情况(可以在最后一个字符中使用额外的哨兵字节来完成)。

字节[]数组正在从文件读取,因此我不知道其编码。谢谢!谢谢D我试图自己编写的解决方案非常慢……我尝试了这个方法,只使用常规字符串和+运算符。他走得很慢。这是因为我没有使用StringBuilder(像我通常那样)?是的。通常,每个
+
操作符都涉及创建一个新的临时
StringBuilder
对象,用部分构建的字符串初始化它,并附加下一个字符,这通常会导致重新分配和复制
StringBuilder
中的内部缓冲区数组。每次循环迭代都会发生这种情况。所以,是的,这通常是一种非常缓慢的方式。使用显式
StringBuilder
并为其分配足够大的缓冲区,可以消除所有这些开销。