Python 使用struct.pack

Python 使用struct.pack,python,struct,int,unsigned,Python,Struct,Int,Unsigned,我的代码如下所示: import struct str = "AAAAAAA" len = len(str)+32 package = struct.pack("!H",len) print repr(package) 结果是: "\x00'" 当我使用len=len(str) 结果是\x00\x07 为什么len大于32时,它不工作?您误解了“\x00”结果。它是字符串十六进制字符代码值和常规可打印ASCII字符的混合体。如果它纯粹以十六进制字符代码显示,它将是“\x00x\x27”

我的代码如下所示:

import struct

str = "AAAAAAA"
len = len(str)+32

package = struct.pack("!H",len)
print repr(package)
结果是:

"\x00'"
当我使用
len=len(str)
结果是
\x00\x07


为什么
len
大于32时,它不工作?

您误解了
“\x00”
结果。它是字符串十六进制字符代码值和常规可打印ASCII字符的混合体。如果它纯粹以十六进制字符代码显示,它将是
“\x00x\x27”


十进制的
\x27
是整数
39
,它是
len(str)+32
的结果。它也是
(单引号)字符的字符代码,它是
repr()
显示内容的一部分。

首先,不要隐藏内置名称,如:
str
len
。给它们起不同的名字(比如在前面加一个u)。为什么你认为输出是错误的?它所做的正是
repr()
在这里应该做的,创建打包结构内容的可打印表示。您希望在这里看到什么输出?请注意“in
”\x00'
(在最后一个0之后)。这是撇号字符:ASCII代码0x27=39=7(
len(“aaaaaaaa”)
)+32。使用unpack函数获取值:
struct.unpack('>H',package)
。它将输出39