Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中将这些字节转换为int的最短方法?_Python - Fatal编程技术网

在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