我以 2 字节短值的十六进制值形式获取数据,但交换值后丢失了。
signed short value = 0x0040;
value = (value*0.5) - 40;
convertMSBTOLSB(value); //Conversion used bcz my device reading as LSB first
//Implementation of convertMSBTOLSB(value)
unsigned short temp = ((char*) &value)[0]; // assign value's LSB
temp = (temp << 8) | ((char*) &value)[1]; // shift LSB to MSB and add value's MSB
value = temp;
转换后我的值为-8
当我发送 0x51 时出现问题,最终值应该是 0.5,但由于值被短签名而变为零。
convertMSBTOLSB 只是字节交换,我如何处理代码以便它可以解析 -ve 和十进制值
期望一些输入来更改代码,以便它可以解析 -ve 和十进制值
最佳答案
您不会得到 0.5,因为您的 value
变量被声明为短变量,因此只能保存整数。
关于c++ - MSB 到 LSB 交换后保留符号和小数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31949360/