将字节数组转换为字符串然后将字符串转换回字节数组时,我得到了奇怪的结果。
试试这个:
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());
对我而言,结果并不像我期望的那样,但是...... 63。
为什么会这样?
答案 0 :(得分:5)
为什么会这样?
因为ASCII只包含最多127个值。
当遇到对给定编码无效的二进制数据时,Encoding.GetString
可以提供替换字符,或抛出异常。在这里,它使用?
的替换字符。
目前还不清楚你正在努力实现的目标,但是:
Convert.ToBase64String
; 不尝试使用编码,因为您并未真正表示文本。您可以使用Convert.FromBase64String
进行解码。Encoding.ASCII
通常是一个糟糕的选择,当然包含172字节的二进制数据不 ASCII文本Encoding.Default
,除非您确实知道数据是您正在使用的平台的默认编码。如果你做出选择,使用UTF-8是一个很好的选择。答案 1 :(得分:3)
ASCII编码是一种7位编码。如果你看一下生成的字符串,它包含“?” - 无法识别的角色。您可以选择Encoding.Default。
答案 2 :(得分:1)
ASCII是七位字符编码,因此172超出该范围,因此在转换为字符串时,它会转换为“?”用于无法表示的字符。