问题描述
我需要将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?
解决方法
在读取多字节数字时,需要注意确定字节顺序的“字节序”。此原始值似乎采用“大”字节序格式,不得为系统上的默认值。试试
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,0x18))),'double')