python 2.7中等价于内置方法int.from_bytes的方法

21

我正在尝试让我的项目同时兼容Python 2.7和3,而Python 3中有内置的int.from_bytes方法。在Python 2.7中是否存在等效的方法?或者,最好的方法是什么,使得这段代码能够同时在Python 2.7和3上运行?

>>> int.from_bytes(b"f483", byteorder="big")
1714698291

1
如果您特别寻求跨版本解决方案,则应在标题中明确说明。 - Ignacio Vazquez-Abrams
4个回答

27

您可以将其视为编码(针对 Python 2):

>>> int('f483'.encode('hex'), 16)
1714698291

或者在Python 2和Python 3中:

>>> int(codecs.encode(b'f483', 'hex'), 16)
1714698291

优点是字符串不受特定大小的限制。缺点是它是无符号的。


哈哈,我很喜欢这个解决方案...真的很棒...它还有一个优点就是不需要了解输入的任何信息。 - Joran Beasley
你的更好,因为它应该在Python 2和3中都能工作。谢谢。 - dawg
这个的反过来是什么?我想从整数中检索原始字节字符串。 - vonec
1
ord(b'\x11') 是什么意思? - deed02392

12

当然,它不适用于大于int32的任何内容。有什么提示吗? - Janus Troelsen
当字节数小于4时,这个方法将无法工作,而int.from_bytes()方法则可以正常工作。 - Tatarize

7
使用 struct 模块将字节解包为整数。
import struct
>>> struct.unpack("<L", "y\xcc\xa6\xbb")[0]
3148270713L

只需将它们解包成字节即可...他希望将它们全部作为1个32位整数...可能更大...但你是对的,stuct是要使用的模块 :) - Joran Beasley
1
我没有意识到他需要实际的整数值,但是没问题,已经修复了。 - SanketDG

1
> import binascii

> barray = bytearray([0xAB, 0xCD, 0xEF])
> n = int(binascii.hexlify(barray), 16)
> print("0x%02X" % n)

0xABCDEF

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接