python-3.x 将bytes转换为int?

qq24tv8q  于 2023-05-02  发布在  Python
关注(0)|答案(8)|浏览(114)

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

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

但我不知道如何做相反的事情。我做错什么了?

qlfbtfca

qlfbtfca1#

假设你至少有三个。2,有一个内置的:

int.from_bytesbytesbyteordersigned=False*)

...
参数 bytes 必须是一个类似字节的对象或一个产生字节的可迭代对象。

  • byteorder* 参数确定用于表示整数的字节顺序。如果 byteorder"big",则最高有效字节位于字节数组的开头。如果 byteorder"little",则最高有效字节位于字节数组的末尾。要请求主机系统的本机字节顺序,请使用sys.byteorder作为字节顺序值。
  • signed* 参数指示是否使用2的补码来表示整数。
## 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
igsr9ssn

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
pieyvz9o

pieyvz9o3#

list()可用于将字节转换为int(适用于Python 3.7):

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

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
bvn4nwqk

bvn4nwqk5#

将字节转换为位串

format(int.from_bytes(open('file','rb').read()),'b')
t3psigkw

t3psigkw6#

在使用缓冲数据的情况下,我发现这很有用:

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

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

1szpjjfi

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
jv4diomz

jv4diomz8#

#convert bytes to int 
    def bytes_to_int(value):
        return int.from_bytes(bytearray(value), 'little')

    bytes_to_int(b'\xa231')

相关问题