我目前正在对一个加密/解密程序,我需要能够转换为一个整数字节。我知道:
bytes([3]) = b'\x03'
但我不知道如何做相反的事情。我做错什么了?
qlfbtfca1#
假设你至少有三个。2,有一个内置的:
int.from_bytes(bytes,byteorder,,signed=False*)
int.from_bytes
bytes
byteorder
signed=False
...参数 bytes 必须是一个类似字节的对象或一个产生字节的可迭代对象。
"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
igsr9ssn2#
字节列表是可下标的(至少在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
pieyvz9o3#
list()可用于将字节转换为int(适用于Python 3.7):
list()
list(b'\x03\x04\x05') [3, 4, 5]
af7jpaap4#
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
bvn4nwqk5#
将字节转换为位串
format(int.from_bytes(open('file','rb').read()),'b')
t3psigkw6#
在使用缓冲数据的情况下,我发现这很有用:
int.from_bytes([buf[0],buf[1],buf[2],buf[3]], "big")
假设buf中的所有元素都是8位长。
buf
1szpjjfi7#
我在寻找现有解决方案时偶然发现的一个老问题。我自己编写了一个,并认为我应该与大家分享,因为它允许您从一个字节列表创建一个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
jv4diomz8#
#convert bytes to int def bytes_to_int(value): return int.from_bytes(bytearray(value), 'little') bytes_to_int(b'\xa231')
8条答案
按热度按时间qlfbtfca1#
假设你至少有三个。2,有一个内置的:
int.from_bytes
(bytes
,byteorder
,,signed=False
*)...
参数
bytes
必须是一个类似字节的对象或一个产生字节的可迭代对象。byteorder
* 参数确定用于表示整数的字节顺序。如果byteorder
是"big"
,则最高有效字节位于字节数组的开头。如果byteorder
是"little"
,则最高有效字节位于字节数组的末尾。要请求主机系统的本机字节顺序,请使用sys.byteorder
作为字节顺序值。signed
* 参数指示是否使用2的补码来表示整数。igsr9ssn2#
字节列表是可下标的(至少在Python 3中是这样)。6)。这样你就可以单独检索每个字节的十进制值。
pieyvz9o3#
list()
可用于将字节转换为int(适用于Python 3.7):af7jpaap4#
不适合我我用了这个网站的功能,它工作得很好
https://coderwall.com/p/x6xtxq/convert-bytes-to-int-or-int-to-bytes-in-python
bvn4nwqk5#
将字节转换为位串
t3psigkw6#
在使用缓冲数据的情况下,我发现这很有用:
假设
buf
中的所有元素都是8位长。1szpjjfi7#
我在寻找现有解决方案时偶然发现的一个老问题。我自己编写了一个,并认为我应该与大家分享,因为它允许您从一个字节列表创建一个32位整数,并指定一个偏移量。
jv4diomz8#