2

我需要将 IEEE-754 格式转换为双精度浮点数。

根据https://babbage.cs.qc.cuny.edu/IEEE-754.old/64bit.html十六进制表示 400921fb54442d18 应该大致是 pi, 3.1415 ...

然而:

> readBin(as.raw(c(0x40, 0x09, 0x21, 0xfb, 0x54, 0x44, 0x2d, 0x18)), 'double')
[1] 3.207376e-192

如何从 R 中的 400921fb54442d18 获取 pi?

4

1 回答 1

1

在读取多字节数字时,您需要注意决定字节顺序的“字节顺序”。这个原始值似乎是“大”端格式,这不能是您系统上的默认值。尝试

readBin(as.raw(c(0x40, 0x09, 0x21, 0xfb, 0x54, 0x44, 0x2d, 0x18)), 'double', endian="big")
# [1] 3.141593

使用小端格式,这些字节将被反转。所以你也可以做

# assuming .Platform$endian returns "little" (system default)
readBin(rev(as.raw(c(0x40, 0x09, 0x21, 0xfb, 0x54, 0x44, 0x2d, 0x18))), 'double')
于 2020-09-07T23:06:26.200 回答