在python中将这些字节转换为int的最短方法?

时间:2010-12-13 20:09:37

标签: python

我正在将以下字符串转换为无符号整数表示形式:

str = '\x00\x00\x00\x00\x00\x00\x01\xFF'

我可以使用struct.unpack('8B', str)来获取元组表示(0,0,0,0,0,0,1,255),但是将这个元组转换为int的最快/最简单的方法是什么?

现在,我的代码是

def unpack_str(s):
  i = r = 0
  for b in reversed(struct.unpack('8B', s)):
    r += r*2**i
    i++
  return r

但对于这么简单的功能来说,这是漫长而丑陋的!肯定有更好的办法!任何SO python guru都可以帮我修剪它并且python-ify吗?

4 个答案:

答案 0 :(得分:6)

>>> struct.unpack('>q', s)[0]
511

答案 1 :(得分:2)

只需解压缩为长(64位整数):

struct.unpack('>Q', str)

Q = unsigned long long。如果字符串表示带符号的长整数,请切换到q

>表示big-endian字节顺序。使用<表示little-endian字节顺序。

答案 2 :(得分:0)

def unpack_str(bytes):
  return struct.unpack('<q',bytes)

Struct可以直接处理8字节长的长度。

答案 3 :(得分:0)

必须同意long and ugly评论。完全忽略了struct.unpack Q / q选项:

def unpack_str(s):
  r = 0
  for b in struct.unpack('8B', s):
    r = r * 256 + b
  return r

倒数第二行可能使用了bit-bashing运算符:

r = (r << 8) | b