求一简单问题!有答案即结帖!
对一个byte[]计算出CRC码后放在一个buffer进行传输,发送的是string类型,所以先把CRC通过System.Text.Encoding.Default.GetString(buffer)转成string类型,问题是接收的常出现3F,在网上查了很久,找到说是一个字节char表示范围小于127,所以计算出来的CRC大于127时就溢出显示3F,我也尝试了以下办法,结果都无法解决,特来求遇到过此类问题的朋友指教!
我试了:
byte[] tt=null;
tt[0] = (byte)buffer[0];
tt[1] = (byte)buffer[1];
我想byte类型表示范围是0-255,但是这样写了还是不行
我还试了用System.Text.Encoding.UTF8.GetString(buffer),也是不行
------解决方案--------------------用无符号得转一下呢
------解决方案--------------------不是任意二进制数据都可以转为字符串的
可以转为16进制字符串
用BitConverter.ToString
------解决方案--------------------直接传byte[] 接收后再解码
------解决方案--------------------可以转为16进制字符串
用BitConverter.ToString
------解决方案--------------------建议把byte[]转成base64传输 C#中有现成的函数
------解决方案--------------------to 可能我还没说清楚,我算出的CRC是一个ushort类型
__________________________---
费了这么大个劲就是想要个string?
str2 =ushort.ToString();//这样不就得了?
------解决方案--------------------其实我就是想知道有什么办法能不溢出,难道只能用byte[]传输才能解决?
---------------------------------
这可难办了,C#的定义就是127的。
------解决方案--------------------to 我是要把ushort存为一个2字节数组,因为接收的PLC要的就是一个2字节的CRC码,你这样一个ToString()那全是ASC码
_____________________________________
ASC过去后再解成byte不成啊?
就算你传字符串,PLC是如何解的解的呢?如果是和写字符串对应的解法,那么我认为那本身就是错的.否则你肯定是自己转编码