[python] 바이트를 정수로 변환 하시겠습니까?

현재 암호화 / 복호화 프로그램을 작업 중이며 바이트를 정수로 변환 할 수 있어야합니다. 나는 알고있다 :

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

그러나 나는 역을 수행하는 방법을 찾을 수 없습니다. 내가 뭘 잘못하고 있니?



답변

3.2 이상이라고 가정하면 다음과 같은 기능이 내장되어 있습니다 .

int.from_bytes ( 바이트, 바이트 순서, *, signed = False )

인수 바이트는 바이트와 유사한 객체이거나 반복 가능한 생성 바이트 여야합니다.

byteorder 인수는 정수를 나타내는 데 사용되는 바이트 순서를 결정합니다. byteorder가 “big”이면 최상위 바이트는 바이트 배열의 시작 부분에 있습니다. byteorder가 “little”이면 최상위 바이트는 바이트 배열의 끝에 있습니다. 호스트 시스템의 기본 바이트 순서를 요청하려면 sys.byteorder를 바이트 순서 값으로 사용하십시오.

부호있는 인수는 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


답변

바이트 목록은 구독 가능합니다 (적어도 Python 3.6에서는). 이렇게하면 각 바이트의 10 진수 값을 개별적으로 검색 할 수 있습니다.

>>> 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 


답변

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


답변