python字符串转int_将字节字符串转换为int(Python)?

在python中,如何将字节字符串转换为int?

像这样说:我的方法:sum(ord(c) << (i * 8) for i, c in enumerate('y\xcc\xa6\xbb'[::-1]))

我知道一定有一些东西是内置的,或者是标准库里的,这样做就更简单了...

这与转换十六进制数字字符串您可以使用int(xxx,16),但是我想转换一个实际字节值的字符串。

因为它不需要导入另一个模块,更快:>>> from timeit import Timer

>>> Timer('struct.unpack("

0.36242198944091797

>>> Timer("int('y\xcc\xa6\xbb'.encode('hex'), 16)").timeit()

1.1432669162750244

我讨厌的方法:>>> Timer("sum(ord(c) << (i * 8) for i, c in enumerate('y\xcc\xa6\xbb'[::-1]))").timeit()

2.8819329738616943

有人在评论中问,导入另一个模块有什么问题。那么,导入一个模块并不一定很便宜,请看一看:>>> Timer("""import struct\nstruct.unpack(">L", "y\xcc\xa6\xbb")[0]""").timeit()

0.98822188377380371

包括导入模块的成本几乎否定了该方法所具有的所有优点。我相信这只会包括在整个基准测试运行中导入一次的费用;看看每次我强迫它重新加载时会发生什么:>>> Timer("""reload(struct)\nstruct.unpack(">L", "y\xcc\xa6\xbb")[0]""", 'import struct').timeit()

68.474128007888794

不用说,如果您在每一个导入中执行大量此方法,那么这个问题在比例上就不那么重要了。它也可能是I/O成本,而不是CPU,因此它可能取决于特定机器的容量和负载特性。