代码之家  ›  专栏  ›  技术社区  ›  bobber205

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

  •  2
  • bobber205  · 技术社区  · 15 年前

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

    我希望能够获取一些字节,将它们转换为字符串,然后稍后返回到 相同的

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

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

    4 回复  |  直到 15 年前
        1
  •  5
  •   Mehrdad Afshari    15 年前

    string s = Convert.ToBase64String(byteArray);
    byte[] decoded = Convert.FromBase64String(s);
    
        2
  •  2
  •   Michael Petrotta user3140870    15 年前

    Base64 他擅长解决这样的问题。

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

        3
  •  1
  •   David R Tribble    15 年前

    如果您不介意将每个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字符中,但随后必须处理奇数字节数组长度的特殊情况(可以在最后一个字符中使用额外的哨兵字节)。

        4
  •  1
  •   Eden    15 年前

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

    Encoding.UTF8.GetBytes
    Encoding.UTF8.GetString
    

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

    Y