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"。我哪里出错了?

BitConverter.在python中相当于DoubleToInt64Bits

使用struct.packbinascii.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'