我目前正在开发一个加密/解密程序,我需要能够将字节转换为整数。我知道:
bytes([3]) = b'\x03'
但是我找不到如何进行逆运算的方法。我到底在做什么错?
Answers:
假设您至少使用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_bytes
和ord(b'\x03')
单个字节/字符之间有区别吗?
int.from_bytes
,如果你告诉它可以解释字节作为一个有符号整数-int.from_bytes(b'\xe4', "big", signed=True)
回报率-28,同时ord()
还是int.from_bytes
无符号的模式将返回228
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
struct
如果您想一次转换多个变量,则还有一个模块。