在Python中将这些字节转换为整数的最简方式是什么?
我正在把下面这个字符串转换成无符号整数:
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