[ComputerScience] 엔디안
엔디안
엔디안(Endian)은 멀티바이트 데이터를 메모리에 저장할 때, 바이트 순서를 정하는 규칙을 의미합니다.
2바이트 이상의 데이터를 저장할 때 가장 큰 단위(상위 바이트)와 가장 작은 단위(하위 바이트)를 어떤 순서로 메모리에 배열(배치)할지를 정의하는 방식입니다.
이때 바이트를 배열하는 방법을 바이트 순서(Byte-Order)라고 합니다.
CPU 아키텍처나 네트워크 통신에 따라 결정됩니다.
- Intel, AMD (x86 계열) : 리틀 엔디안
- 일부 RISC 아키텍처 : 빅 엔디안
- ARM은 모드에 따라 둘 다 지원하지만 리틀 엔디안이 기본
네트워크 통신의 경우 항상 빅 엔디안을 사용하도록 규약되어 있습니다.
엔디안이 중요한 이유는 시스템 간에 데이터를 전송할 때 엔디안의 차이가 있을 경우 호환성 문제를 일으킬 수 있기 때문입니다.
이 경우 엔디안 변환이 필요하고, 현대의 프로세서나 소프트웨어 환경에서는 대부분 내부에서 자동적으로 처리하지만, 임베디드 시스템이나 저수준 프로그래밍에서는 직접 고려해야합니다.
3가지 방식의 엔디안이 있습니다.
- 빅 엔디안
- 리틀 엔디안
- 미들 엔디안
미들 엔디안은 특정 시스템에서 혼합된 형태로 사용하는 경우도 있었으나 현대에는 거의 쓰이지 않습니다.
빅 엔디안
빅 엔디안(Big Endian)은 상위 바이트(MSB, Most Significant Bit)를 낮은 번지의 주소에 저장하는 방식입니다.
일상적으로 숫자 체계를 읽고 쓰는 순서와 동일한 방식입니다.
예를 들어, 정수 0x12345678
(4바이트)를 메모리에 저장한다고 가정할 때 다음과 같습니다.
주소 | 0x00 | 0x01 | 0x02 | 0x03 |
값 | 12 | 34 | 56 | 78 |
메모리 값을 직접 읽거나 디버깅 할 때 편리합니다.
리틀 엔디안
리틀 엔디안(Little Endian)은 하위 바이트(LSB, Least Significant Bit)를 낮은 번지의 주소에 저장하는 방식입니다.
인텔 x86, x86-64 아키텍처에서 기본적으로 사용합니다.
예를 들어, 정수 0x12345678
(4바이트)를 메모리에 저장한다고 가정할 때 다음과 같습니다.
주소 | 0x00 | 0x01 | 0x02 | 0x03 |
값 | 78 | 56 | 34 | 12 |
메모리 값을 직접 읽고 쓰기는 불편하지만 수치 계산이 편리하다는 장점이 있습니다.
MSB와 LSB
MSB는 숫자의 크기에 가장 큰 영향을 미치는 유효 숫자로, 가장 왼쪽에 있는 비트입니다.
LSB는 숫자의 크기에 가장 적은 영향을 미치는 유효 숫자로, 가장 오른쪽에 있는 비트입니다.
예를 들어 10진수 123에서 MSB의 숫자는 1이고, LSB의 숫자는 3입니다.
빅 엔디안은 MSB가 있는 바이트이며, 중요하고 큰 데이터부터 저장해 나가는 방식입니다.
리틀 엔디안은 LSB가 있는 바이트이며, 덜 중요하고 작은 데이터부터 저장해 나가는 방식입니다.
댓글남기기