保留MSB到LSB交换后的符号和小数

时间:2015-08-11 18:28:52

标签: c++ c c++11

我在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和十进制值

3 个答案:

答案 0 :(得分:0)

你不会得到0.5,因为你的value变量被宣告为短,因此只能保持整数。

答案 1 :(得分:0)

你的问题不清楚。你写过convertMSBTOLSB在MSB和LSB之间交换,你也写了

  

convertMSBTOLSB只是字节交换

由于MSB和LSB受到 Bits 而不是字节,我真的不明白你想在这里交换什么。

答案 2 :(得分:0)

您的value应更改其类型。 0.5value是不兼容的类型(整数和浮点数)。因此,操作(value*0.5)将导致零。

除此之外,40将被提升为double,因此在将其分配回value后,该值将被截断。