Little & Big Endian
Bit(비트) 와 Byte(바이트)
컴퓨터는 모든 데이터를 2진수로 표현하고 처리한다,
비트(bit)
컴퓨터가 데이터를 처리하기 위해서 사용하는 최소 단위이다. 이러한 비트에는 2진수의 값 0 과 1을 단 하나만 저장할 수 있다.
바이트(byte)
위와 같은 비트가 8개 모여서 구성되고, 한 문자를 표현할 수 있는 최소 단위다.
이떄 바이트가 저장되는 순서에 따라 아래 Little, Big Endian 두 가지 방식으로 나눌 수 있다.
Little & Big Endian을 배우기 전에, 바이트의 저장 순서를 먼저 알아야한다.
Big Endian
빅 엔디안 방식은 낮은 주소에 데이터의 높은 바이트(MSB, Most Significant Bit)부터 저장하는 방식이다. 이 방식은 평소 우리가 숫자를 사용하는 선형 방식과 같은 방식이다.
ex)12,34,56,78 이러한 방식으로 이해하기가 쉽다.
0x12345678 // 비트의 크기의 정수가 있다.
0x12, 0x34, 0x56, 0x78 // 1바이트 값 4개로 구성되어 있다.
4개의 바이트 값을 빅 엔디안 방식으로 저장하면 아래와 같이 저장된다.
Little Endian
리틀 엔디안 방식은 낮은 주소에 데이터의 낮은 바이트(LSB, Least Significant Bit)부터 저장하는 방식으로, 이 방식은 평소 우리가 숫자를 사용하는 선형 방식이 아닌 반대로 읽어야한다.
대부분의 인텔 CPU 계열에서는 이 방식으로 데이터를 저장하며, 아래 사진을 참고하자
Big & Little 차이점
빅 엔디안과 리틀 엔디안은 저장해야 할 데이터를 어떻게 나눠 저장하는 지 차이점을 가지고 있다.
물리적으로 데이터를 조작하거나 산술 연산에서는 리틀 엔디안
데이터의 각 바이트를 배열처럼 취급할 때에는 빅 엔디안
대부분의 윈도우 기반의 시스템은 인텔 기반으로 리틀 엔디안 방식을 사용하고, 네트워크를 통해 데이터를 전송할 때에는 빅 엔디안 방식을 사용한다. 이와 같이 인텔 기반의 소켓 통신을 할 때 바이트 순서에 신경을 써서 데이터를 전달해야한다.
int i;
int example = 0x12345678; // 4개의 바이트가 모여있음
char *ptr = (char *)&example // char 타입으로 1바이트만 가리키는 포인터 생성
for(i = 0; i<sizeof(int); i++) {
printf("%x", ptr[i]); // 1 바이트씩 순서대로 값을 출력한다.
}
// Return 78563412 -> 리틀 엔디안 방식으로 리턴
| 출처 : TCP School (https://www.tcpschool.com/c/c_refer_endian)
'Embedded > Embedded SW' 카테고리의 다른 글
Embedded Memory ? (0) | 2025.01.13 |
---|