Python 为什么struct不接受字符串作为输入

Python 为什么struct不接受字符串作为输入,python,struct,Python,Struct,我遇到了一个结构没有打包字符串的问题 我目前创建了一个随机的20字节长的字符串,当我尝试使用20个八位字节的结构将其打包时,使用下面的代码 payload = struct.pack("H" * 20, *rendezvous_cookie) rendezvous_cookie calculated by os.urandom(20) 我得到错误struct.error:无法将参数转换为整数 有没有什么简单快捷的方法来编码字符串,这样就可以将其打包 谢谢 编辑并通过执行以下操

我遇到了一个结构没有打包字符串的问题

我目前创建了一个随机的20字节长的字符串,当我尝试使用20个八位字节的结构将其打包时,使用下面的代码

    payload = struct.pack("H" * 20, *rendezvous_cookie)

   rendezvous_cookie calculated by  os.urandom(20)
我得到错误struct.error:无法将参数转换为整数

有没有什么简单快捷的方法来编码字符串,这样就可以将其打包

谢谢

编辑并通过执行以下操作修复它:

payload = struct.pack('!20s', rendezvous_cookie)
这样,它将输入作为一个字符串,仍然是20个八位字节。Uradom(n)返回一个长度为
n
的随机
str

如果要从中列出整数,请使用:

[ord(b) for b in os.urandom(n)]
您可以将其作为参数提供给
struct.pack


但是请注意,
os.uradom(n)
已经返回了一个字节的序列化列表。你可以直接使用它。使用
struct.pack(“H”,…)
会使每个数字占用两个字节(其中一个字节将不包含任何数据)。

无论如何,为什么要通过
struct
将其输入?如果你想要一个字符串,你已经有了它。(如果您想要整数,您想要
解包
)我想将cookie中的数据打包到包含信息的20个八位字节的有效负载中,因为我想在一个包中发送此数据。它已经是20个八位字节的有效负载了。您的最终struct.pack本质上是一个NOP。向自己证明:
foo=os.uradom(20);bar=结构包('!20s',foo);foo==bar
还应该意识到,struct的“H”生成的是一个无符号的短字符,而不是八位字节。