C#byte【】里的数转换成string时,打印str时每次结尾都是?
byte[] buf= {9,10,20,10,9,8,8,5,4,190,255}; string str = null; str = System.Text.Encoding.Default.GetString(buf, 0, 11); byte[] temp = System.Text.Encoding.Default.GetBytes(str);
问题:为什么我把byte【】里的数转换成string时,打印str时每次结尾都是? 的字符在终端下,
当我把str重新转换成byte【】时 最后一个值变调了255 变成了? 16进制的3f
ps我现在的工作主要的想把 client.recv()回来的字符转化成字符串类型的,可是现在字符串的结尾值会变调。现在该怎么办呢,亲、、、、、、、、、、、、、、、 buf 接收的字符串是什么? 你们两方的编码要统一,最好别用Encoding.Default,是byte还是char,他们的范围是不一样的
这里是你用错了编码,必须用UTF8而不能是ASCII编码,Default编码就是ASCII编码,而ASCII编码是7位的字节,从 U+0000 到 U+007F,因此在转换到字符串的时候就丢失了第8位的数据,再转回来自然不正确了。 正确的做法是:
C# code?byte[] buf= {9,10,20,10,9,8,8,5,4,190,255}; string str = null; str = System.Text.Encoding.UTF8.GetString(buf, 0, 11); byte[] temp = System.Text.Encoding.UTF8.GetBytes(str);
|