解包错误需要长度为16的字符串参数

时间:2016-02-21 18:40:46

标签: python

使用Python 2.7我有这个代码:

#Create a random 56 bit (7 byte) string
random_bytes = os.urandom(7)
random_bytes = int.from_bytes(random_bytes, byteorder="big")

出现错误:

  

AttributeError:type object'int'没有属性'from_bytes'

在线阅读后,from_bytes看起来像是Python 3.所以我尝试了以下内容:

  random_bytes = os.urandom(7)
  #random_bytes = int.from_bytes(random_bytes, byteorder="big")
  random_bytes = struct.unpack('>16B', random_bytes)

但这会产生以下错误:

  

struct.error:unpack需要一个长度为16的字符串参数

>16B>7B吗?即使这样,它似乎也会返回一个元组。

目标是像这样使用random_bytes

int(str(((time_bytes << 56) | random_bytes)) + code)

2 个答案:

答案 0 :(得分:2)

也许这会有所帮助:

import os

binary = os.urandom(7)
result = int(binary.encode('hex'), 16)

答案 1 :(得分:1)

也许这对你有用:

r = chr(0) + os.urandom(7)  # pad with zeroes
struct.unpack('>q', r)

q是有符号8字节整数的代码(Q是无符号的)。

结果是一个元素的元组。