1

将字节数组转换为字符串然后将字符串转换回字节数组时,我得到了奇怪的结果。

尝试这个:

     byte[] b = new byte[1];
    b[0] = 172;
    string s = Encoding.ASCII.GetString(b);

    byte[] b2 = Encoding.ASCII.GetBytes(s);
    MessageBox.Show(b2[0].ToString());

对我来说,结果不是我期望的 172,而是...... 63。

为什么会这样?

4

3 回答 3

5

为什么会这样?

因为 ASCII 只包含不超过 127 的值。

当遇到对给定编码无效的二进制数据时,Encoding.GetString可以提供替换字符,或者抛出异常。在这里,它使用 . 的替换字符?

目前尚不清楚您要达到的目标,但是:

  • 如果要将任意二进制数据转换为文本,请Convert.ToBase64String改用;不要尝试使用编码,因为您并没有真正代表文本您可以使用Convert.FromBase64String来解码。
  • Encoding.ASCII通常是一个糟糕的选择,当然包括 172 字节的二进制数据不是ASCII 文本
  • 您需要确定您实际使用的编码。我个人不喜欢使用Encoding.Default,除非你真的知道数据是你正在使用的平台的默认编码。如果您可以选择,使用 UTF-8 是一个不错的选择。
于 2013-10-18T13:36:02.563 回答
3

ASCII 编码是一种 7 位编码。如果您查看生成的字符串,它包含“?” - 无法识别的字符。您可以选择 Encoding.Default。

于 2013-10-18T13:36:19.383 回答
1

ASCII 是七位字符编码,所以 172 不在这个范围内,所以在转换为字符串时,它会转换为“?” 用于无法表示的字符。

于 2013-10-18T13:36:33.303 回答