BitConverter.在python中相当于DoubleToInt64Bits
本文关键字:相当于 DoubleToInt64Bits python BitConverter | 更新日期: 2023-09-27 18:14:39
我认为真正了解双精度数的最好方法是稍微摆弄一下它们,我想做的一件事就是看看它们的(几乎)二进制表示。为此,在c#中,函数BitConverter.DoubleToInt64Bits
非常有用,因为它(在转换为十六进制后)让我看到了浮点数的"真实"性质。
问题是我似乎无法在Python中找到等效函数,是否有一种方法可以在Python函数中做与BitConverter.DoubleToInt64Bits
相同的事情?
谢谢。
编辑:
下面的答案建议usinginascii.hexlify(struct.pack('d', 123.456)
转换成十六进制的双表示,但我仍然得到奇怪的结果。
例如
inascii.hexlify(struct.pack('d', 123.456))
确实返回' 77be9f1a2fdd5e40'
,但如果我运行c#中应该等效的代码,即
BitConverter.DoubleToInt64Bits(123.456).ToString("X")
我得到一个完全不同的数字:"405EDD2F1A9FBE77"
。我哪里出错了?
使用struct.pack
和binascii.hexlify
如何?
>>> import binascii
>>> import struct
>>> struct.pack('d', 0.0)
''x00'x00'x00'x00'x00'x00'x00'x00'
>>> binascii.hexlify(struct.pack('d', 0.0))
'0000000000000000'
>>> binascii.hexlify(struct.pack('d', 1.0))
'000000000000f03f'
>>> binascii.hexlify(struct.pack('d', 123.456))
'77be9f1a2fdd5e40'
struct format指定d
代表double
的c类型(8字节= 64比特)。其他格式请参见字符格式。
通过指定@
, =
, <
, >
, !
作为格式的第一个字符,可以表示字节顺序。(字节顺序,大小和对齐方式)
>>> binascii.hexlify(struct.pack('<d', 123.456)) # little-enddian
'77be9f1a2fdd5e40'
>>> binascii.hexlify(struct.pack('>d', 123.456)) # big-endian
'405edd2f1a9fbe77'