BitConverter.DoubleToInt64位python中的等价物

2024-05-16 10:13:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我想我真正了解双精度数字的最好方法就是玩弄一下它们,我想做的一件事就是看看它们(几乎)的二进制表示。为此,在C中,BitConverter.DoubleToInt64Bits函数非常有用,因为它(在转换成十六进制之后)让我了解了浮点数的“真正”性质。在

问题是我似乎找不到Python中的等效函数,有没有一种方法可以在Python函数中执行与BitConverter.DoubleToInt64Bits相同的操作?在

谢谢。在


编辑:

下面的一个答案建议usinginascii.hexlify(struct.pack('d', 123.456)将double转换为十六进制表示,但我仍然得到奇怪的结果。在

例如

inascii.hexlify(struct.pack('d', 123.456))

确实返回'77be9f1a2fdd5e40',但是如果我运行的代码在C#中应该是等价的,即

^{pr2}$

我得到了一个完全不同的号码:"405EDD2F1A9FBE77"。我在哪里犯了错?在


Tags: 方法函数答案编辑二进制精度数字建议
1条回答
网友
1楼 · 发布于 2024-05-16 10:13:30

使用^{}^{}怎么样?在

>>> 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表示doublec类型(8字节=64位)。有关其他格式,请参见Format characters。在

更新

通过指定@=<>!作为格式的第一个字符,可以指示字节顺序。(Byte Order, Size, and Alignment

^{pr2}$

相关问题 更多 >