无符号类型给有符号类型赋值符号位的问题
记一次bug问题分析问题再写modbus通信协议解析的时候遇到一个问题计算CRC的时候返回值是一个unsigned short接受的时候我定义的结构体里的CRC是一个有符号 short也是头一次遇到有无符号位的问题。下面我把具体代码贴出来。if(pModbusWrite-sCRC0x825d)//一开始提示出问题的代码pModbusWrite-sCRCModBusCRC16Table(aucAnalyzBuf,7pModbusWrite-ucByte_Number);//查表法计算CRC//下面可以看到返回的是unsigned shortunsignedshortModBusCRC16Table(unsignedchar*puchMsg,unsignedshortusDataLen){unsignedcharuchCRCHi0xFF;/* high byte of CRC initialized */unsignedcharuchCRCLo0xFF;/* low byte of CRC initialized */unsigneduIndex;/* will index into CRC lookup table */while(usDataLen--)/* pass through message buffer */{uIndexuchCRCLo^*puchMsg;/* calculate the CRC */uchCRCLouchCRCHi^auchCRCLo[uIndex];uchCRCHiauchCRCHi[uIndex];}return(uchCRCHi8|uchCRCLo);}typedefstructmodbus_write{unsignedcharucAddr;unsignedcharucFunction;unsignedcharucHighAddr;unsignedcharucLowAddr;unsignedcharucHighNumber;unsignedcharucLowNumber;unsignedcharucByte_Number;shortsCRC;// 这里我定义的是short}*PMODBUS_Write,MODBUS_Write;/*把unsigned short赋值给了short*/分析unsigned short 0x825d 第一位是1short的话也就是符号位为0这样一来short的最高位也就是符号位永远不可能为1所以提示错误我在debug的时候看到pModbusWrite-sCRC 就是显示为0x825D但是就是进不去if里面。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2423950.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!