请问谁知道byte[]怎么转换为char[]啊

kinglucifa 2013-05-28 03:13:11
byte[] bdata={0xEA,0x2A,0x00,0xD6,0x42,0x22,0xD7,0x54,0xF0,0x04,0x81,0x00,0xD6,0x6C,0x75,0x6A};
char[] buffer=new char[16];
buffer=Encoding.ASCII.GetChars(bdata);
我是按照上面这样做的。但是调试的时候,发现结果buffer里面的数据有的就不是对应的字符,转换后对应的十进制数如下所示
0xEA,0x2A,0x00,0xD6,0x42,0x22,0xD7,0x54,0xF0,0x04,0x81,0x00,0xD6,0x6C,0x75,0x6A
63, 42, 0, 63, 66, 34, 63, 84, 63, 4, 63, 0, 63, 108,117,106

发现凡是变成63的全是错的,其他的是对的,请问正确的代码应该如何写?谁知道的麻烦告诉我。
...全文
4733 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
xky96 2013-05-30
  • 打赏
  • 举报
回复
引用 7 楼 kinglucifa 的回复:
谢谢楼上的,你说的第一个办法,我刚才试了,效果和Encoding.UTF7.GetChars(bdata)是一样的,行不通。 第二个办法我觉得我读取的数据是二进制数据,应该是用ReadByte按字节读取的,用ReadChar是从缓冲区中一次读取一个字符,貌似也不行。
Byte值0xEA转换为char后,如果希望其值仍然为0xEA,那么就如楼上所说,与编码无关。 直接赋值就可以了:buffer[i]=(char)bdata[i]。 至于ReadChar应该可以,别拘泥于字符、字节的区别,char也可以用来存放整数。
  • 打赏
  • 举报
回复
byte -> char 你这个就是 byte 与 char 之间的转换,如果就接到什么Encoding的字符编码,那就是绕了一个大圈。而且你把 byte 转为字符,再转回来时肯定就丢失了一些信息。实际上 byte[]转为字符串,并不能保证再转回原来的byte[]。 所以整个转换过程中就不关 Encoding 字符编码的事。
  • 打赏
  • 举报
回复
当然如果跟互联网url无关,那么写 bdata.Select(x=> (char)x).ToArray() 其实就好了。我不知道你怎么搞出来 Encoding.ASCII 呢?这就是 byte -> byte 的转换啊,跟字符无关。
  • 打赏
  • 举报
回复
HttpUtility.UrlDecodeToBytes(bdata)
stonespace 2013-05-29
  • 打赏
  • 举报
回复
大于128的肯定不是ASCII编码,不知道为何要用ASCII去解释大于128的字符编码,
devmiao 2013-05-28
  • 打赏
  • 举报
回复
用Encode.GetString()转换为string,然后调用ToCharArray()。
kinglucifa 2013-05-28
  • 打赏
  • 举报
回复
谢谢楼上的,你说的第一个办法,我刚才试了,效果和Encoding.UTF7.GetChars(bdata)是一样的,行不通。 第二个办法我觉得我读取的数据是二进制数据,应该是用ReadByte按字节读取的,用ReadChar是从缓冲区中一次读取一个字符,貌似也不行。
xky96 2013-05-28
  • 打赏
  • 举报
回复
两个办法: 1. 遍历赋值 buffer[i]=(char)bdata[i] 2. 串口取数据不要用ReadByte,可以是ReadChar、Read等都可以
kinglucifa 2013-05-28
  • 打赏
  • 举报
回复
我后来用Encoding.UTF7.GetChars(bdata),发现虽然buffer里的数值是对的,但是最后的结果相差很大。还是应该是ASCII ,但是ASCII只到128,大于128的就全变为63了,请问谁知道怎么解决这个问题啊?
kinglucifa 2013-05-28
  • 打赏
  • 举报
回复
谢谢各位,我自己解决了。
kinglucifa 2013-05-28
  • 打赏
  • 举报
回复
这些数值都是从串口接收到的十六进制数据,需要转换为char[],以便于dll中的函数引用。由于那几个数据出错了,所以最后得出的结果不对。请教各位正确的应该怎么做。谢谢了。
moonwrite 2013-05-28
  • 打赏
  • 举报
回复
Encoding.ASCII 试试其他编码 另外,byte[] bdata={0xEA,0x2A 这些数值是怎么来的~ 你就要用什么方式还原回去~ 比如A和B 约定0x11是 你好 A和C约定0x11 是 大家好 那么当A收到0x11的时候 必须知道是什么约定
bdmh 2013-05-28
  • 打赏
  • 举报
回复
范围不一样,转换可能会引起数据丢失

110,534

社区成员

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

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

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