对一个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),也是不行

解决方案 »

  1.   

    不是任意二进制数据都可以转为字符串的
    可以转为16进制字符串
    用BitConverter.ToString
      

  2.   

    直接传byte[]  接收后再解码
      

  3.   

    现在用的是别人写的发送控件,不然我也想直接发byte[]了,因为用的是PLC接收的
      

  4.   

    //转为字符串
    string str = BitConverter.ToString(tt).Replace("-","");//转回byte数组
    ublic byte[]  Hex2ByteArr(string src)
    {
        int len = src.Length/2;
        byte[] arr = new byte[len];
        for(int i=0;i<len;i++)
        {
            arr[i] = Convert.ToByte(src.Substring(i*2,2),16);
        }
        return arr;
    }
      

  5.   

    可以转为16进制字符串
    用BitConverter.ToString
      

  6.   

    可能我还没说清楚,我算出的CRC是一个ushort类型,我用
    byte[] tt = BitConverter.GetBytes(crc(System.Text.Encoding.Default.GetBytes(str1)));
    获得CRC的字节数组,然后我转成string:
    str2 = System.Text.Encoding.Default.GetString(tt);
    我为了在发出去之前看转的对不对,把字节内容显示了出来:
    byte[] eee = System.Text.Encoding.Default.GetBytes(str2);
    for (int i = 0; i < eee.Length; i++)
    {
        tb_Info.AppendText(eee[i].ToString("X2")+" ");
    }发现这样操作,经常就是出现3F,就是溢出
      

  7.   

    如用上面大家说的
    BitConverter.ToString(tt).Replace("-","");
    转成16进制的字符串,其实得到的就是asc码的16进制字符串,而不是这个16进制对应的内存中代表的原来的数据了,这样的数据下位机PLC收到的也是这样的字符串,是不会识别出这个16进制字符串表示的数据的
      

  8.   

    建议把byte[]转成base64传输 C#中有现成的函数
      

  9.   

    to 可能我还没说清楚,我算出的CRC是一个ushort类型
    __________________________---
    费了这么大个劲就是想要个string?
    str2 =ushort.ToString();//这样不就得了?
      

  10.   

    费了这么大个劲就是想要个string?
    str2 =ushort.ToString();//这样不就得了?----------------------------------------我是要把ushort存为一个2字节数组,因为接收的PLC要的就是一个2字节的CRC码,你这样一个ToString()那全是ASC码
      

  11.   

    其实我就是想知道有什么办法能不溢出,难道只能用byte[]传输才能解决?
      

  12.   

    其实我就是想知道有什么办法能不溢出,难道只能用byte[]传输才能解决?
    ---------------------------------------------------------------------
    这可难办了,C#的定义就是127的。
      

  13.   

    to 我是要把ushort存为一个2字节数组,因为接收的PLC要的就是一个2字节的CRC码,你这样一个ToString()那全是ASC码
    _____________________________________
    ASC过去后再解成byte不成啊?
    就算你传字符串,PLC是如何解的解的呢?如果是和写字符串对应的解法,那么我认为那本身就是错的.否则你肯定是自己转编码
      

  14.   

    我还是想办法直接发byte[] 解决了,谢谢各位