struct.unpack() 中的 "L" 、 "LLL" 有什么区别?



"L""LLL"有什么区别?我认为在l中,结果转换为长,结果为5,在lll中,结果转换为长,结果为555?

导入结构数据= 5

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

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

我试图通过以下代码来了解这些输出的样子,但这只是导致不可读的随机炭

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

可能比内容更揭示的是结果的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字节。

此处记录了编码。如果您使用的是32位Python vs 64位Python,则可能会得到不同的答案 - Windows vs. 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']

最新更新