더북(TheBook)

1 메모리 저장 방식


1234(천이백삼십사)라는 수를 쓸 때 우리는 항상 왼쪽에서 오른쪽으로 씁니다. 천이백삼십사를 오른쪽에서 왼쪽으로 쓰면 4321이 되어 전혀 다른 수가 됩니다. 하지만 지금부터 전 세계가 수를 오른쪽에서 왼쪽으로 쓰자고 약속하면 그렇게 표기할 수도 있습니다. 리틀 엔디언과 빅 엔디언은 그 약속에 대한 이야기입니다. 정수 하나를 4바이트 메모리 공간(변수)에 저장해 볼까요? 표현의 편의를 위해 정수는 16진수로 표현하겠습니다. 16진수 0x01020304는 10진수로는 16909060입니다.

>>> a = 0x01020304

>>> a

16909060


변수 a가 실제 메모리 공간에 어떻게 저장될지 생각해 봅시다. 16진수 두 자리는 1바이트를 나타내고 4바이트에 저장된다고 했으므로 각 바이트에 1, 2, 3, 4가 저장됩니다. 이때 1, 2, 3, 4 순서대로 저장되는 것을 빅 엔디언(big-endian)이라고 하고, 이와 반대로 4, 3, 2, 1 순서로 저장되는 것을 리틀 엔디언(little-endian)이라고 합니다. 사람은 빅 엔디언 방식을 사용한다고 보면 됩니다.


TIP 빅 엔디언과 리틀 엔디언이라는 용어는 ‘걸리버 여행기’에서 계란의 뾰족한 끝을 먼저 깰지 뭉툭한 끝을 먼저 깰지를 두고 격론을 벌인 빅 엔디언(뭉툭한 끝을 먼저 깨는 사람들)과 리틀 엔디언(뾰족한 끝을 먼저 깨는 사람들)에서 유래했습니다.


to_bytes() 함수를 이용하면 빅 엔디언 방식일 때의 바이트의 나열과 리틀 엔디언일 때의 바이트 나열을 확인할 수 있습니다.

>>> a.to_bytes(4, 'big')

b'\x01\x02\x03\x04'

>>> a.to_bytes(4, 'little')

b'\x04\x03\x02\x01'

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.