C# BitConverter.DoubleToInt64位在python中等效

C# BitConverter.DoubleToInt64位在python中等效,c#,python,double,C#,Python,Double,我想我真正了解双精度数字的最好方法就是对它们进行一点研究,我想做的一件事就是看看它们(几乎)的二进制表示。为此,在C#中,BitConverter.doubleToInt64位函数非常有用,因为它(在转换为十六进制后)让我了解了浮点数的“真实”性质 问题是,我似乎无法在Python中找到等效的函数,有没有办法在Python函数中执行与BitConverter.doubleToInt64位相同的操作 多谢各位 编辑: 下面的回答建议使用nascii.hexlify(struct.pack('d'

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

问题是,我似乎无法在Python中找到等效的函数,有没有办法在Python函数中执行与
BitConverter.doubleToInt64位
相同的操作

多谢各位


编辑:

下面的回答建议
使用nascii.hexlify(struct.pack('d',123.456)
将双精度转换为十六进制表示,但我仍然得到奇怪的结果

比如说,

inascii.hexlify(struct.pack('d', 123.456))
确实返回“
77be9f1a2fdd5e40”
但是如果我运行的代码在C#中应该是等效的,即

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

使用和怎么样

结构格式指定
d
表示
double
c类型(8字节=64位)。有关其他格式,请参阅

更新

通过指定
@
=
作为格式的第一个字符,可以指示字节顺序。()

binascii.hexlify(struct.pack('d',123.456))#big-endian ‘405edd2f1a9fbe77’
它们并非完全不同。它们是以相反顺序排列的相同字节。405EDD2F1A9FBE77更有用,因为它以十六进制数字对的形式显示字节,顺序与IEEE 754规范中的相同,因此我会尝试将数据按该顺序排列。非常感谢!工作正常!
BitConverter.DoubleToInt64Bits(123.456).ToString("X")
>>> 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'
>>> binascii.hexlify(struct.pack('<d', 123.456)) # little-enddian
'77be9f1a2fdd5e40'
>>> binascii.hexlify(struct.pack('>d', 123.456)) # big-endian
'405edd2f1a9fbe77'