关于byte【】 转string 的问题啊,求解啊

布鲁克斯南南 2013-09-03 03:48:11
            
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()回来的字符转化成字符串类型的,可是现在字符串的结尾值会变调。现在该怎么办呢,亲、、、、、、、、、、、、、、、
...全文
191 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
布鲁克斯南南 2013-09-04
  • 打赏
  • 举报
回复
引用 11 楼 lizhi3186575 的回复:
[quote=引用 5 楼 li875590079 的回复:] [quote=引用 3 楼 lizhi3186575 的回复:] 你是想把字符数组转化为字符串,那你测试的怎么用字节数组的,改成char[]数组测试下
我知道是byte 长度不够,但是我们的client.recv()这里不是字节流吗,没办法,客户端发过来的是16进制的编码,有的都是大于ansicc里编码的最大的7f 这个范围,所以造成字符串不显示![/quote] 参考这个例子:http://code.msdn.microsoft.com/CSHexStringByteArrayConvert-a80e955d[/quote] 谢谢,这个挺有帮助的
人生导师 2013-09-03
  • 打赏
  • 举报
回复
引用 5 楼 li875590079 的回复:
[quote=引用 3 楼 lizhi3186575 的回复:] 你是想把字符数组转化为字符串,那你测试的怎么用字节数组的,改成char[]数组测试下
我知道是byte 长度不够,但是我们的client.recv()这里不是字节流吗,没办法,客户端发过来的是16进制的编码,有的都是大于ansicc里编码的最大的7f 这个范围,所以造成字符串不显示![/quote] 参考这个例子:http://code.msdn.microsoft.com/CSHexStringByteArrayConvert-a80e955d
qldsrx 2013-09-03
  • 打赏
  • 举报
回复
这里是你用错了编码,必须用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);
布鲁克斯南南 2013-09-03
  • 打赏
  • 举报
回复
引用 7 楼 u011130289 的回复:
[quote=引用 5 楼 li875590079 的回复:] [quote=引用 3 楼 lizhi3186575 的回复:] 你是想把字符数组转化为字符串,那你测试的怎么用字节数组的,改成char[]数组测试下
我知道是byte 长度不够,但是我们的client.recv()这里不是字节流吗,没办法,客户端发过来的是16进制的编码,有的都是大于ansicc里编码的最大的7f 这个范围,所以造成字符串不显示![/quote] 长度不够可以分开来接收的,统一编码是才是重点![/quote] 我是用网络调式助手发的,按16进制发送的
布鲁克斯南南 2013-09-03
  • 打赏
  • 举报
回复
引用 3 楼 lizhi3186575 的回复:
你是想把字符数组转化为字符串,那你测试的怎么用字节数组的,改成char[]数组测试下
引用 2 楼 bdmh 的回复:
你们两方的编码要统一,最好别用Encoding.Default,是byte还是char,他们的范围是不一样的
还有版主,我需呀问一下,为什么我发的一个“BE ”大于125的时候,为什么clien.recvive()里的byte为什么会填充的下去呢?
Regan-lin 2013-09-03
  • 打赏
  • 举报
回复
引用 5 楼 li875590079 的回复:
[quote=引用 3 楼 lizhi3186575 的回复:] 你是想把字符数组转化为字符串,那你测试的怎么用字节数组的,改成char[]数组测试下
我知道是byte 长度不够,但是我们的client.recv()这里不是字节流吗,没办法,客户端发过来的是16进制的编码,有的都是大于ansicc里编码的最大的7f 这个范围,所以造成字符串不显示![/quote] 长度不够可以分开来接收的,统一编码是才是重点!
布鲁克斯南南 2013-09-03
  • 打赏
  • 举报
回复

看这个接收d的buff
布鲁克斯南南 2013-09-03
  • 打赏
  • 举报
回复
引用 3 楼 lizhi3186575 的回复:
你是想把字符数组转化为字符串,那你测试的怎么用字节数组的,改成char[]数组测试下
我知道是byte 长度不够,但是我们的client.recv()这里不是字节流吗,没办法,客户端发过来的是16进制的编码,有的都是大于ansicc里编码的最大的7f 这个范围,所以造成字符串不显示!
布鲁克斯南南 2013-09-03
  • 打赏
  • 举报
回复
引用 2 楼 bdmh 的回复:
你们两方的编码要统一,最好别用Encoding.Default,是byte还是char,他们的范围是不一样的
这位版主你好,经常看到你,我知道范围不一样的一个-125~125 另个-255~256 但是我们的client.recv()里不是byte【】型的吗?我现在是主要是想把接收的回来的byte 转换成string型 ,对方发过来的是16进制的,只要是大于7F 好像就显示? 目前主要的把对方发过来的字符,做解析。
人生导师 2013-09-03
  • 打赏
  • 举报
回复
你是想把字符数组转化为字符串,那你测试的怎么用字节数组的,改成char[]数组测试下
bdmh 2013-09-03
  • 打赏
  • 举报
回复
你们两方的编码要统一,最好别用Encoding.Default,是byte还是char,他们的范围是不一样的
智商余额不足 2013-09-03
  • 打赏
  • 举报
回复
buf 接收的字符串是什么?

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧