在Python中将这些字节转换为整数的最简方式是什么?

6 投票
4 回答
8022 浏览
提问于 2025-04-16 08:29

我正在把下面这个字符串转换成无符号整数:

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

我可以用 struct.unpack('8B', str) 来得到一个元组,结果是 (0,0,0,0,0,0,1,255),但是把这个元组转换成整数的最快、最简单的方法是什么呢?

现在,我的代码是

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

但是这样写太长太复杂了,对于这么简单的功能来说!一定有更好的方法!有没有哪位 StackOverflow 的 Python 大神能帮我简化一下,让代码更 Python 化呢?

4 个回答

0

我得同意那个说法,确实是“又长又难看”。完全忽略了 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
2

只需将其解压为一个长整型(64位整数):

struct.unpack('>Q', str)

Q表示无符号长整型。如果字符串表示的是有符号长整型,就用q

>表示大端字节顺序。如果要表示小端字节顺序,就用<

6

在编程中,有时候我们需要处理一些数据,这些数据可能来自不同的地方,比如用户输入、文件或者网络请求。为了让程序能够理解这些数据,我们通常需要将它们转换成程序能处理的格式。

比如说,如果你从用户那里得到了一个字符串(就是一串字符),但你需要的是一个数字来进行计算,那么你就需要把这个字符串转换成数字。这种转换的过程在编程中是非常常见的。

另外,有些时候我们还需要将数据从一种格式转换成另一种格式,比如把一个列表转换成一个字典,或者把一个对象转换成JSON格式(这是一种常用的数据交换格式)。这些操作可以让我们更方便地使用和存储数据。

总之,数据转换是编程中一个非常重要的部分,能够帮助我们更好地处理和利用数据。

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

撰写回答