我正在将以下字符串转换为无符号整数表示形式:
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吗?
答案 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