마지막 구문
안녕하세요. 이 문제를 풀다가 마지막 구문이 이해가 되지 않아서 이렇게 질문을 남깁니다.
password += int.to_bytes(int(bits, 2), (bit_length + 7) // 8, "big").decode("utf-8")
(1) 구글링을 해보면 int.to_bytes(길이, order, 2의 보수) 이런식으로 쓴다고 나와있는데, 여기서는 어떻게 사용하는 건지 궁금합니다.
(2) 야매로 제가 끼워 맞추어보았을때, (bit_length+7)//8을 하는이유가, 총 7비트가 1개의 블록이라고 앞에서 배웠는데, 이를 나눠주기 위해 사용하는건가요?
(3) 그리고 또한 만약 이렇게 계산한다면, decode utf8을 할때 한번에 이루어지나요? 아니면 따로 따로 이루어지나요?
열심히 공부해보겠습니다..ㅜ
#web
작성자 정보
답변
1
연주
2024 Invitational Contenders
안녕하세요!
to_bytes
메서드를 object로 호출할 땐object.to_bytes(길이, 바이트오더)
이고, class로 호출할 땐int.to_bytes(정수, 길이, 바이트오더)
로 쓸 수 있습니다.
>>> (111111111).to_bytes(4, 'little')
b'\xc7k\x9f\x06'
>>> int.to_bytes(111111111, 4, 'little')
b'\xc7k\x9f\x06'
-
bit_length
에 따라1~8 -> 1
,9~16 -> 2
,17~24 -> 3
으로 계산됩니다. 즉, 해당 bitstring이 나타내는 정수를 담는 데에 필요한 최소의 바이트 개수를 구하는 공식입니다. -
(솔직히 말해서 질문을 잘 이해하지 못했습니다) utf-8은 가변 길이 인코딩이라서 1바이트든 3바이트든 인코딩 형식에 맞으면 한 번에 변환됩니다.