字节到int - Python 3

时间:2015-11-30 23:04:29

标签: python python-3.x int type-conversion byte

我是最新的;正在研究加密/解密程序,我需要能够将字节转换为整数。我知道:

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

然而,我无法找到如何做反​​过来。我做错了什么?

4 个答案:

答案 0 :(得分:47)

假设你至少有3.2,那就是built in for this

  

int.from_bytes bytes,byteorder,*,signed = False

     

...

     

参数bytes必须是类字节对象或iterable   产生字节。

     

byteorder参数确定用于表示的字节顺序   整数。如果byteorder是"大",则最重要的字节位于   字节数组的开头。如果byteorder是" 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

答案 1 :(得分:7)

字节列表是可下标的(至少在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 

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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

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