Strange results when converting from byte array to string

心已入冬 提交于 2021-02-05 08:44:06

问题


I get strange results when converting byte array to string and then converting the string back to byte array.

Try this:

     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());

And the result for me is not 172 as I'd expect but... 63.

Why does it happen?


回答1:


Why does it happen?

Because ASCII only contains values up to 127.

When faced with binary data which is invalid for the given encoding, Encoding.GetString can provide a replacement character, or throw an exception. Here, it's using a replacement character of ?.

It's not clear exactly what you're trying to achieve, but:

  • If you're converting arbitrary binary data to text, use Convert.ToBase64String instead; do not try to use an encoding, as you're not really representing text. You can use Convert.FromBase64String to then decode.
  • Encoding.ASCII is usually a bad choice, and certainly binary data including a byte of 172 is not ASCII text
  • You need to work out which encoding you're actually using. Personally I dislike using Encoding.Default unless you really know the data is in the default encoding for the platform you're working on. If you get the choice, using UTF-8 is a good one.



回答2:


ASCII encoding is a 7-bit encoding. If you take a look into generated string it contains "?" - unrecognized character. You might choose Encoding.Default instead.




回答3:


ASCII is a seven bit character encoding, so 172 falls out of that range, so when converting to a string, it converts to "?" which is used for characters that cannot be represented.



来源:https://stackoverflow.com/questions/19451021/strange-results-when-converting-from-byte-array-to-string

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!