将2个字节或3个字节转换为C中的浮点数

时间:2016-10-18 08:17:35

标签: c floating-point

我正在使用具有高数据速率的低级协议,因此根据数字的范围使用2或3个字节来表示float,以提高系统效率

我试图解析这些数字,但我得到的价值对我来说没有意义,他们都是零,我不认为该设备会输出零有问题的变量。

我缓冲区中的前5个字节是:FF-FF-FF-FF-FF

前两个字节组成float t。应该注意的是,文档说字节是小端。

解析t我这样做:

float t = 0;
memcpy(buffer, &t, 2);

接下来的3个字节组成float ax,以解析我做的事情:

float ax = 0;
memcpy(buffer+2, &ax, 3);

这是处理此问题的正确方法吗?我先将tax设置为零,以防有随机字节闲逛。

更新

文档不是很好。首先,他们将Float定义为32-bit IEEE 754 floating-point number

然后有这句话:

To increase efficiency many of the data packets are sent as 24-bit signed integer words 
because 16-bits do not provide the range/precision required for many of the quantities, 
whereas 32-bit precision makes the packet much longer than required.

然后有一个表将t定义为缓冲区的前2个字节。它表明范围是0-59.999。它并没有明确表示它是Float,我只是做出了这样的假设。

1 个答案:

答案 0 :(得分:-3)

可能你的论点是错误的。改变如下:

memcpy (buffer, &t, 2);

memcpy (&t, buffer, 2);

HTH

[编辑:为了向所有投票我的答案的人澄清,这个问题确实有错误的方式。尝试读取缓冲区,但将其指定为memcpy的目的地