프로그래밍 언어/C

[C언어 참조] 바이트 저장 순서

순정법사 2023.08.17

A. 바이트 저장 순서

1. 비트(bit)와 바이트(byte)

a. 비트(bit)

🌟 컴퓨터가 데이터를 처리하기 위해 사용하는 데이터의 최소 단위

비트는 0과 1 중 단 하나만 저장 가능

 

b. 바이트(byte)

바이트 = 비트 8개

 

🌟 한 문자를 표현할 수 있는 최소 단위

 

 

2. 바이트 저장 순서(byte order)

컴퓨터는 데이터를 메모리에 저장할 때 바이트(byte) 단위로 나눠서 저장
하지만 컴퓨터가 저장하는 데이터 -> 32비트 / 64비트로 구성
따라서 연속되는 바이트를 순서대로 저장하는것을 바이트 저장 순서(byte order)라고 함

바이트가 저장되는 순서에 따라 나눈 방식은 두가지가 있음

a. 빅 엔디안(big endian)

🌟 낮은 주소에 데이터의 높은 바이트(MSB, Most Significant Bit)부터 저장하는 방식

 

평소 우리가 숫자를 사용하는 선형 방식과 같은 방식

= 메모리에 저장된 순서 그대로 읽을 수 있으며, 이해하기가 쉽다는 장점

SPARC을 포함한 대부분의 RISC CPU 계열에서는 이 방식으로 데이터를 저장

 

🤓 예제

0x12345678  //32비트 크기의 정수

//이 정수는 각각 다음과 같이 1바이트값 4개로 구성됨

0x12, 0x34, 0x56, 0x78


🎨 도식화

도식화한 모습



b. 리틀 엔디안(little endian)

리틀 엔디안 방식은 낮은 주소에 데이터의 낮은 바이트(LSB, Least Significant Bit)부터 저장하는 방식

 

빅 엔디안과 반대로 거꾸로 읽어야 함

대부분의 인텔 CPU 계열에서는 이 방식으로 데이터를 저장

🎨 도식화

위 예시를 리틀 엔디안으로 저장한 모습



c. 빅 엔디안 vs 리틀 엔디안

저장방법의 차이일뿐 우수한건 없지만 효율로만 따지면,

데이터의 각 바이트를 배열처럼 취급할 때 -> 빅엔디안
물리적으로 데이터를 조작하거나 산술 연산을 수행할 때 -> 리틀 엔디안


우리가 사용하는 대부분의 시스템은 인텔 기반의 윈도우이므로 리틀 엔디안 방식을 사용함
하지만 네트워크를 통해 데이터를 전송할 때에는 빅 엔디안 방식 사용
👉 따라서 인텔 기반의 시스템에서 소켓 통신을 할 때는 바이트 순서에 신경을 써서 데이터를 전달해야 함

 

🧡 바이트 저장 순서의 확인

우리 시스템에서 사용하고 있는 바이트 저장 순서를 확인하기

int i;
int test = 0x12345678;
char* ptr = (char*)&test; // 1 바이트만을 가리키는 포인터를 생성함.

 

for (i = 0; i < sizeof(int); i++)
{
    printf("%x", ptr[i]); // 1 바이트씩 순서대로 그 값을 출력함.
}​


12345678 -> 빅 엔디안 / 87654321 -> 리틀엔디안

 

 

 


출처 : http://www.tcpschool.com/c/c_refer_endian

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com