programing

바이트를 int로 변환하시겠습니까?

yellowcard 2023. 5. 5. 08:47
반응형

바이트를 int로 변환하시겠습니까?

저는 현재 암호화/암호 해독 프로그램을 진행하고 있으며 바이트를 정수로 변환할 수 있어야 합니다.알고 있습니다.

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

하지만 저는 그 반대의 방법을 찾을 수 없습니다.내가 뭘 심하게 잘못하고 있는 거지?

3.2 이상을 사용하고 있다고 가정하면 다음과 같은 기능이 기본으로 제공됩니다.

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

...

인수는 바이트와 같은 개체이거나 반복 가능한 생성 바이트여야 합니다.

인수는 정수를 나타내는 데 사용되는 바이트 순서를 결정합니다.그렇다면"big"가장 중요한 바이트는 바이트 배열의 시작 부분에 있습니다.그렇다면"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

바이트 목록은 구독 가능합니다(최소한 파이썬 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 

list()바이트를 int로 변환하는 데 사용할 수 있습니다(파이썬 3.7에서 작동).

list(b'\x03\x04\x05')
[3, 4, 5]
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

버퍼링된 데이터로 작업하는 경우 다음과 같은 이점이 있습니다.

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

의 모든 요소를buf길이가 8비트입니다.

기존의 해결책을 찾다가 우연히 발견한 오래된 질문.제가 직접 굴려서 공유하려고 생각했습니다. 바이트 목록에서 오프셋을 지정하여 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
#convert bytes to int 
    def bytes_to_int(value):
        return int.from_bytes(bytearray(value), 'little')

    bytes_to_int(b'\xa231')

언급URL : https://stackoverflow.com/questions/34009653/convert-bytes-to-int

반응형