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