有什么区别" L"," LLL"在struct.unpack()中?

时间:2016-06-20 05:14:39

标签: python-2.7

"L""LLL"之间有什么区别?我认为在L中,结果转换为long,结果为5,在LLL中,结果转换为long,结果为555?

导入结构 data = 5

  1. Result = struct.pack("L", data)

  2. Result = struct.pack("LLL", data, data, data)

  3. 我试着通过以下代码看到我的自己这些输出是什么样的,但它只会导致无法读取的随机特征

    import struct
    data = 5
    
    Result1 = struct.pack("L", data)
    
    Result2 = struct.pack("LLL", data, data, data)
    
    print (Result1)
    print (Result2)
    

1 个答案:

答案 0 :(得分:0)

结果的len可能比内容更具启发性:

import struct
data = 5

Result1 = struct.pack("L", data)

Result2 = struct.pack("LLL", data, data, data)

print len(Result1)
print len(Result2)

输出:

$ python p.py 
8
24

打包数据将其打包成二进制格式str。每个long编码为8个字节。编码3个long时,你得到3 * 8 = 24个字节。

编码记录here。如果您使用32位Python与64位Python,您可能会得到不同的答案 - Windows与Linux也可能会产生不同的结果。

如果要将数据视为十六进制字符串:

>>> map(hex, map(ord, struct.pack("L", 255)))
['0xff', '0x0', '0x0', '0x0', '0x0', '0x0', '0x0', '0x0']

>>> struct.pack("L", 255).encode('hex_codec')
'ff00000000000000'

或二进制

>>> map(bin, map(ord, struct.pack("L", 255)))                                                             
['0b11111111', '0b0', '0b0', '0b0', '0b0', '0b0', '0b0', '0b0']