将double(float)转换为python中的字节

时间:2018-06-22 08:52:08

标签: python-3.x serialization binary udp double

另请参见How to convert a float into hex,以表示十六进制的倍数

import struct

def double_to_hex(f):
    return hex(struct.unpack('<Q', struct.pack('<d', f))[0])

doubleAsHex = double_to_hex(2.1)
print("doubleAsHex (correct):", doubleAsHex)
doubleAsBytes = bytearray.fromhex(doubleAsHex.replace('0x',''))

print("doubleAsBytes (missing first byte):", doubleAsBytes)

输出:

doubleAsHex (correct): 0x4000cccccccccccd
doubleAsBytes (missing first byte): bytearray(b'@\x00\xcc\xcc\xcc\xcc\xcc\xcd')

遗漏字节的原因是什么?

1 个答案:

答案 0 :(得分:0)

您已经显示了:

doubleAsHex (correct): 0x4000cccccccccccd
doubleAsBytes (missing first byte): bytearray(b'@\x00\xcc\xcc\xcc\xcc\xcc\xcd')

如果我们破坏字节数组,您将具有以下内容:

[0] => @  # First Byte 
[1] => 00
[2] => cc
[3] => cc
[4] => cc
[5] => cc
[6] => cc
[7] => cd

但是发生的是,打印功能正在使用十六进制40(在ascii中为@),它与其他字符不一样,因为存在数字,并且十六进制中可以有unil F