我目前正在编写一个加密/解密程序,我需要能够将字节转换为整数。我知道:
bytes([3]) = b'\x03'
然而,我却不知道如何做到相反的事情。我到底做错了什么?
假设你至少在3.2,有一个 天生就是干这个的:
int.from_bytes (ABC1,ABC2,* ,signed=False) ... 参数 bytes必须是类字节对象或可迭代对象 产生字节。 byteorder参数确定用于表示 如果 byteorder是 "big",则最高有效字节位于 字节数组的开头。如果 byteorder是 "little",则 有效字节位于字节数组的末尾 主机系统的本机字节顺序,使用 sys.byteorder作为字节 订单价值。 signed参数表示两个补语是否习惯于 表示整数。
int.from_bytes (ABC1,ABC2,* ,signed=False)
int.from_bytes
signed=False
...
参数 bytes必须是类字节对象或可迭代对象 产生字节。
bytes
byteorder参数确定用于表示 如果 byteorder是 "big",则最高有效字节位于 字节数组的开头。如果 byteorder是 "little",则 有效字节位于字节数组的末尾 主机系统的本机字节顺序,使用 sys.byteorder作为字节 订单价值。
byteorder
"big"
"little"
sys.byteorder
signed参数表示两个补语是否习惯于 表示整数。
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位长的。
buf
list()可以用来将字节转换为 int (可以在 Python 3.7中使用) :
list()
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')