int.to_bytes 수행 시

int(bits, 2).to_bytes(bit_length, byteorder="big").decode("utf-8")

이렇게 하긴 했는데요.
예시에서는 bit_length 대신 (bit_length + 7) // 8 을 사용하던데 이유가 있을까요? 전자처럼해도 wargame 답은 나와서요.

#웹해킹 #심화 #sql_injection
작성자 정보
답변 1
2dedce
워게임 고인물

to_bytes의 첫 번째 인자로 들어가는 숫자는 바이트 숫자입니다. 그래서 bit_length=8이면 8비트=1바이트니까 저 자리에는 1이 들어가는 것이 맞지요. 그래서 8로 정수 나눗셈을 하는 것입니다. 그런데 그냥 나누면 bit_length=4일 때 0이 되잖아요? 그래서 +7을 하고 //8을 하면 올림 나눗셈이 되서 결과로 1이 나오게 됩니다.
(bit_length + 7) // 8math.ceil(bit_length / 8)로 보셔도 됩니다. (ceil은 올림 함수이고, /는 실수 나눗셈기호 입니다)

그냥 bit_length를 적으면 bit_length=8인 상황에서 1바이트가 아니라 8바이트로 나오겠죠.

>>> (65).to_bytes(8, 'big')
b'\x00\x00\x00\x00\x00\x00\x00A'
2022.04.05. 22:23
질문에 대한 답을 알고 계신가요?
지식을 나누고 포인트를 획득해보세요.
답변하고 포인트 받기