我在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 :(得分:0)
你不会得到0.5,因为你的value
变量被宣告为短,因此只能保持整数。
答案 1 :(得分:0)
你的问题不清楚。你写过convertMSBTOLSB在MSB和LSB之间交换,你也写了
convertMSBTOLSB只是字节交换
由于MSB和LSB受到 Bits 而不是字节,我真的不明白你想在这里交换什么。
答案 2 :(得分:0)
您的value
应更改其类型。 0.5
和value
是不兼容的类型(整数和浮点数)。因此,操作(value*0.5)
将导致零。
除此之外,40将被提升为double
,因此在将其分配回value
后,该值将被截断。