日期:2014-05-17  浏览次数:20799 次

请问一个串口接收数据后解码的问题
我的代码如下:
private void Sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
           Thread.Sleep(500); //读取速度太慢,加Sleep延长读取时间, 不可缺少
            byte[] readBuffer = new byte[sp.ReadBufferSize];
            sp.Read(readBuffer, 0, readBuffer.Length);
            string txt = Encoding.ASCII.GetString(readBuffer); //ASCII卡码
            string text = ByteToHexStr(readBuffer); //用到函数,作用:转换16进制
            sp.DiscardInBuffer();
           this.Invoke(interfaceUpdataHandle, new string[] { text }); //通过Invoke调用事件}

串口获得的byte数据,我用ASCII转换后是?\0?xx\0\0?\0?\0?x\0??\0?\0?\0?x\0??x\0\0x?\0?\0?xx\0\0?\0?\0?x\0??\0?\0?\0?x\0??x\0\0x?\0?\0?xx\0\0?\0?\0?x\0??\0?\0?\0?x\0??x\0\0x?\0\0.......后面都是\0了
我用ByteToHexStr转换后是8000F8781E780000800080008000800080008000807800FF80800078FE008000F8781E780000800080008000800080008000807800FF80800078FE008000F8781E780000800080008000800080008000807800FF80800078FE00000000.........然后后面N个0

请问哪种解码才对,怎么才能转换成int型,我需要读取的是磅称的重量数据

------解决方案--------------------

排 版好了再看那个分协议乱了。看不懂。
------解决方案--------------------
21楼正解
楼主看懂通讯协议就明白怎么回事了,表示重量的是第3到第8个字节,小数点位数是第9个字节。楼主可以直接分析读进来的字节数组,就按照21楼的办法