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

时间:2014-07-07 22:56:10

标签: python struct

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

我目前创建一个随机的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个八位字节

1 个答案:

答案 0 :(得分:1)

os.urandom(n)会返回长度为str的随机n

如果要从中制作整数列表,请使用:

[ord(b) for b in os.urandom(n)]

您可以将其作为参数提供给struct.pack

但请注意,os.urandom(n) 已经返回了一个序列化的字节列表。您可以直接使用它。使用struct.pack("H", ...)使每个数字占用两个字节(其中一个不包含数据)。