无符号类型给有符号类型赋值符号位的问题
记一次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里面。