현재 암호화 / 복호화 프로그램을 작업 중이며 바이트를 정수로 변환 할 수 있어야합니다. 나는 알고있다 :
bytes([3]) = b'\x03'
그러나 나는 역을 수행하는 방법을 찾을 수 없습니다. 내가 뭘 잘못하고 있니?
현재 암호화 / 복호화 프로그램을 작업 중이며 바이트를 정수로 변환 할 수 있어야합니다. 나는 알고있다 :
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
int.from_bytes
와 사이에 차이점이 ord(b'\x03')
있습니까?
int.from_bytes
은 바이트를 부호있는 정수로 해석 할 수 있다는 것입니다. int.from_bytes(b'\xe4', "big", signed=True)
-28을 반환하고 ord()
또는 int.from_bytes
부호없는 모드에서는 228을 반환합니다.
바이트 목록은 구독 가능합니다 (적어도 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
struct
한 번에 여러 변수를 변환하려는 경우 에도 모듈이 있습니다.