在python中将这些字节转换为int的最短方法?
我正在将以下字符串转换为其无符号整数表示形式:在python中将这些字节转换为int的最短方法?,python,Python,我正在将以下字符串转换为其无符号整数表示形式: str='\x00\x00\x00\x00\x00\x00\x01\xFF' 我可以使用struct.unpack('8B',str)来获取元组表示形式(0,0,0,0,0,1255),但是将这个元组转换为int最快/最简单的方法是什么 现在,我的代码是 def unpack_str(s): i = r = 0 for b in reversed(struct.unpack('8B', s)): r += r*2**i i+
str='\x00\x00\x00\x00\x00\x00\x01\xFF'
我可以使用struct.unpack('8B',str)
来获取元组表示形式(0,0,0,0,0,1255)
,但是将这个元组转换为int最快/最简单的方法是什么
现在,我的代码是
def unpack_str(s):
i = r = 0
for b in reversed(struct.unpack('8B', s)):
r += r*2**i
i++
return r
但是对于这样一个简单的函数来说,这又长又丑!一定有更好的办法!任何一位python大师能帮我把它精简一下,让它变成python吗?def unpack_str(字节):
def unpack_str(bytes):
return struct.unpack('<q',bytes)
返回struct.unpack(“仅将其解压为long-long(64位整数):
Q
=无符号长字符。如果字符串表示有符号长字符,请切换到Q
表示大端字节顺序。使用必须同意长而难看的注释。完全忽略struct.unpack Q/Q选项:
def unpack_str(s):
r = 0
for b in struct.unpack('8B', s):
r = r * 256 + b
return r
最后第二行可能使用了位攻击运算符:
r = (r << 8) | b
r=(r psst!您的函数将始终返回零!您知道为什么吗?i++
是无效语法(与运行但不做任何事情的同样无意义但更狡猾的++i
相反)。感谢您的回复,但实际上,您的“@linked:
是为little endian编写的(即最右边的位是最高有效位),代码>
表示大端(即最左边的位是最高有效位)。q
表示(有符号)long
。
def unpack_str(s):
r = 0
for b in struct.unpack('8B', s):
r = r * 256 + b
return r
r = (r << 8) | b