我目前正在开发一个加密/解密程序,需要将字节转换为整数。我知道:
bytes([3]) = b'\x03'
然而我找不到如何进行反向操作,我做错了什么吗?
我目前正在开发一个加密/解密程序,需要将字节转换为整数。我知道:
bytes([3]) = b'\x03'
然而我找不到如何进行反向操作,我做错了什么吗?
假设你至少使用的是3.2版本以上,Python提供了一个内置方法int.from_bytes可以将字节转换为整数:
int.from_bytes
(bytes
,byteorder
, *,signed=False
)...
要转换的参数
bytes
可以是类字节对象或生成字节的可迭代对象。
byteorder
参数决定用于表示整数的字节顺序。如果byteorder
是"big"
,则最高有效字节位于字节数组的开头;如果是"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
和ord(b'\x03')
在处理单个字节/字符时有区别吗? - Billint.from_bytes
使用有符号整数解释字节,则它可以将字节解释为有符号整数。例如,int.from_bytes(b'\xe4', "big", signed=True)
会返回-28,而使用无符号模式的ord()
或int.from_bytes
则返回228。 - Peter DeGloppersys.byteorder
传递字节顺序。 - Krishna Oza>>> 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
list()
可以用于将字节转换为整数(在 Python 3.7 中可行):
list(b'\x03\x04\x05')
[3, 4, 5]
tuple()
也可以使用。 - howdoicodeint.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
int.from_bytes(bytes, 'big')
。 - A Kareem如果需要处理缓冲数据,我发现以下内容很有用:
int.from_bytes([buf[0],buf[1],buf[2],buf[3]], "big")
buf
中的所有元素都是8位长。将字节转换为位字符串
format(int.from_bytes(open('file','rb').read()),'b')
在寻找现有解决方案时,我偶然发现了一个老问题。我自己做了一个并想分享,因为它允许您从字节列表中创建一个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')
struct
模块。 - tdelaneyb'\x03'[0]
- djvgvar = b'abc'
,那么var[0]
将返回97
,var[1]
返回98
,以此类推。 - Have a nice day