将字节转换为 int? ?

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

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

然而,我却不知道如何做到相反的事情。我到底做错了什么?

426204 次浏览

假设你至少在3.2,有一个 天生就是干这个的:

int.from_bytes (ABC1,ABC2,* ,signed=False)

...

参数 bytes必须是类字节对象或可迭代对象 产生字节。

byteorder参数确定用于表示 如果 byteorder"big",则最高有效字节位于 字节数组的开头。如果 byteorder"little",则 有效字节位于字节数组的末尾 主机系统的本机字节顺序,使用 sys.byteorder作为字节 订单价值。

signed参数表示两个补语是否习惯于 表示整数。

## 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_bytes( bytes, byteorder, *, signed=False )

对我没用 我使用这个网站的功能,它工作得很好

Https://coderwall.com/p/x6xtxq/convert-bytes-to-int-or-int-to-bytes-in-python

def bytes_to_int(bytes):
result = 0
for b in bytes:
result = result * 256 + int(b)
return result


def int_to_bytes(value, length):
result = []
for i in range(0, length):
result.append(value >> (i * 8) & 0xff)
result.reverse()
return result

字节列表是可下标的(至少在 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

在处理缓冲数据时,我发现这很有用:

int.from_bytes([buf[0],buf[1],buf[2],buf[3]], "big")

假设 buf中的所有元素都是8位长的。

list()可以用来将字节转换为 int (可以在 Python 3.7中使用) :

list(b'\x03\x04\x05')
[3, 4, 5]

这是我在寻找现有解决方案时偶然发现的一个老问题。我自己设计了一个,我想分享一下,因为它允许你从一个字节列表中创建一个32位整数,指定一个偏移量。

def bytes_to_int(bList, offset):
r = 0
for i in range(4):
d = 32 - ((i + 1) * 8)
r += bList[offset + i] << d
return r
#convert bytes to int
def bytes_to_int(value):
return int.from_bytes(bytearray(value), 'little')


bytes_to_int(b'\xa231')