在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,因此它可能取决于特定机器的容量和负载特性。