读书人

关于byte【】 转string 的有关问题啊

发布时间: 2013-09-05 16:02:06 作者: rapoo

关于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 这个范围,所以造成字符串不显示!


参考这个例子:http://code.msdn.microsoft.com/CSHexStringByteArrayConvert-a80e955d

读书人网 >C#

热点推荐