将字节转换为int?


84

我目前正在开发一个加密/解密程序,我需要能够将字节转换为整数。我知道:

bytes([3]) = b'\x03'

但是我找不到如何进行逆运算的方法。我到底在做什么错?


2
struct如果您想一次转换多个变量,则还有一个模块。
tdelaney 2015年

Answers:


131

假设您至少使用3.2,则有一个内置功能

int.from_bytes字节,字节序,*,带符号= False

...

参数字节必须是类似字节的对象或可迭代的生成字节。

byteorder参数确定用于表示整数的字节顺序。如果byteorder为“ big”,则最高有效字节在字节数组的开头。如果字节序为“小”,则最高有效字节在字节数组的末尾。要请求主机系统的本机字节顺序,请使用sys.byteorder作为字节顺序值。

带符号的自变量指示是否使用二进制补码表示整数。


## Examples:
int.from_bytes(b'\x00\x01', "big")                         # 1
int.from_bytes(b'\x00\x01', "little")                      # 256

int.from_bytes(b'\x00\x10', byteorder='little')            # 4096
int.from_bytes(b'\xfc\x00', byteorder='big', signed=True)  #-1024

谢谢。int.from_bytesord(b'\x03')单个字节/字符之间有区别吗?
比尔

我能想到的唯一的区别是int.from_bytes,如果你告诉它可以解释字节作为一个有符号整数-int.from_bytes(b'\xe4', "big", signed=True)回报率-28,同时ord()还是int.from_bytes无符号的模式将返回228
彼得DeGlopper

6

字节列表是可下标的(至少在Python 3.6中)。这样,您可以分别获取每个字节的十进制值。

>>> intlist = [64, 4, 26, 163, 255]
>>> bytelist = bytes(intlist)       # b'@x04\x1a\xa3\xff'

>>> for b in bytelist:
...    print(b)                     # 64  4  26  163  255

>>> [b for b in bytelist]           # [64, 4, 26, 163, 255]

>>> bytelist[2]                     # 26 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.