我正在使用具有高数据速率的低级协议,因此根据数字的范围使用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);
这是处理此问题的正确方法吗?我先将t
和ax
设置为零,以防有随机字节闲逛。
更新
文档不是很好。首先,他们将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
,我只是做出了这样的假设。
答案 0 :(得分:-3)
可能你的论点是错误的。改变如下:
memcpy (buffer, &t, 2);
到
memcpy (&t, buffer, 2);
HTH
[编辑:为了向所有投票我的答案的人澄清,这个问题确实有错误的方式。尝试读取缓冲区,但将其指定为memcpy的目的地