日期:2014-05-17  浏览次数:20954 次

关于byte【】 转string 的问题啊,求解啊
            
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()回来的字符转化成字符串类型的,可是现在字符串的结尾值会变调。现在该怎么办呢,亲、、、、、、、、、、、、、、、
string

------解决方案--------------------
buf 接收的字符串是什么?
------解决方案--------------------
你们两方的编码要统一,最好别用Encoding.Default,是byte还是char,他们的范围是不一样的
------解决方案--------------------
你是想把字符数组转化为字符串,那你测试的怎么用字节数组的,改成char[]数组测试下
------解决方案--------------------
引用:
Quote: 引用:

你是想把字符数组转化为字符串,那你测试的怎么用字节数组的,改成char[]数组测试下


我知道是byte 长度不够,但是我们的client.recv()这里不是字节流吗,没办法,客户端发过来的是16进制的编码,有的都是大于ansicc里编码的最大的7f 这个范围,所以造成字符串不显示!

长度不够可以分开来接收的,统一编码是才是重点!
------解决方案--------------------
这里是你用错了编码,必须用UTF8而不能是ASCII编码,Default编码就是ASCII编码,而ASCII编码是7位的字节,从 U+0000 到 U+007F,因此在转换到字符串的时候就丢失了第8位的数据,再转回来自然不正确了。
正确的做法是:
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);

------解决方案--------------------
引用:
Quote: 引用:

你是想把字符数组转化为字符串,那你测试的怎么用字节数组的,改成char[]数组测试下


我知道是byte 长度不够,但是我们的client.recv()这里不是字节流吗,没办法,客户端发过来的是16进制的编码,有的都是大于ansicc里编码的最大的7f 这个范围,所以造成字符串不显示!