IEEE-11073 是医疗设备中常用的格式。您引用的表格包含了您可以解码数字的所有内容,尽管一开始可能很难破译。
让我们以第一个例子为例:0xFF00016C
。这是一个 32 位数字,第一个字节是指数,最后三个字节是尾数。两者都以 2 补码表示形式进行编码:
- 指数,
0xFF
,在 2 的补码中,这是数字-1
- 尾数,
0x00016C
,在 2 的补码中,这是数字364
(如果您不太确定数字如何编码为 2 的补码,请作为单独的问题提出。)
我们要做的下一步是确保它不是表中所示的“特殊”值。因为你的指数不是0
(it is -1
),我们知道你没事。因此,不需要特殊处理。
由于该值并不特殊,因此其数值很简单:mantissa * 10^exponent
。所以,我们有:364*10^-1 = 36.4
,如您的示例所示。
你的第二个例子是类似的。指数是0xFE
,这就是数字-2
2 的补码。尾数是0x000D97
,即3479
以十进制表示。同样,指数不为 0,因此不需要特殊处理。所以你有了:3479*10^-2 = 34.79
.
你说对于98.5
值,你得到字节数组[113, 14, 0, 254]
。让我们看看我们能否理解这一点。以十六进制编写的字节数组是:[0x71, 0x0E, 0x00, 0xFE]
。我猜您以“相反”顺序接收这些字节,因此作为 32 位十六进制,这实际上是0xFE000E71
.
我们继续类似的操作:指数又是-2
, since 0xFE
你就是这样写的-2
使用 8 位进行 2 的补码。 (见上文。)尾数是0xE71
这等于3697
。所以,数字是3697*10^-2 = 36.97
.
你声称这实际上是98.5
。我最好的猜测是您正在以华氏度阅读它,并且您的设备正在以摄氏度进行报告。如果你计算一下,你会发现36.97C = 98.55F
,这已经足够接近了。我不确定你是如何得到的98.5
数字,但对于这样的设备,这个结果似乎在你可以预期的精度范围内。
希望这可以帮助!