字节数组到字符串和返回。困惑

时间:2015-03-20 18:42:50

标签: c#

这段代码有什么问题?为什么会有差异?

byte [] data = new byte [] {0x21, 0x4B, 0x9B, 0xE1, 0x2D, 0xA7, 0x4B, 0x93, 0x1E, 0x3F, 0xDA, 0x4F, 0xB1};
Console.WriteLine(BitConverter.ToString(data));

string dataStr = ASCIIEncoding.ASCII.GetString(data);       
byte[] ca = ASCIIEncoding.ASCII.GetBytes(dataStr);
Console.WriteLine(BitConverter.ToString(ca));

输出:

  

21-4B-9B-E1-2D-A7-4B-93-1E-3F-DA-4F-B1

     

21-4B-3F-3F-2D-3F-4B-3F-1E-3F-3F-4F-3F

1 个答案:

答案 0 :(得分:2)

ASCII不定义7F以上的字符代码,似乎ASCIIEncoding.ASCII.GetString()选择用3F替换无效字节,?代表字符{{1}}。

您可能需要阅读Joel Spolsky's excellent article on encoding