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


84

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

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

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


2
struct한 번에 여러 변수를 변환하려는 경우 에도 모듈이 있습니다.
tdelaney 2015

답변:


131

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

감사. 단일 바이트 / 문자 int.from_bytes와 사이에 차이점이 ord(b'\x03')있습니까?
Bill

내가 생각할 수있는 유일한 차이점 int.from_bytes은 바이트를 부호있는 정수로 해석 할 수 있다는 것입니다. int.from_bytes(b'\xe4', "big", signed=True)-28을 반환하고 ord()또는 int.from_bytes부호없는 모드에서는 228을 반환합니다.
Peter DeGlopper

6

바이트 목록은 구독 가능합니다 (적어도 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 

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.