본문 바로가기
기타

Big-endian / Little-endian

by ㅇㅅㅇ.. 2024. 8. 10.

컴퓨터는 데이터를 메모리에 저장할 때 byte 단위로 저장한다. 컴퓨터가 저장하는 데이터는 보통 32 bits(4 bytes)나 64 bits(8 bytes)로 구성되는데 연속되는 바이트를 순서대로 저장해야 하며, 바이트가 저장되는 순서(byte order)에 따라 크게 두 가지로 나뉜다.


1. Little-endian

낮은 주소에 낮은 바이트(LBS, Least Significant Bit)부터 저장
대부분의 Intel CPU 계열에서 사용

  • 연산의 효율성
    예를 들어 두 숫자를 더한다고 가정하면 하위 바이트부터 시작하여 carry가 발생할 경우 다음 바이트로 넘어가는 식으로 진행이 된다. Little-endian의 경우 하위 바이트가 메모리의 첫 번째 위치에 있으므로 프로세서가 순차적으로 계산하기에 유리하다.
  • 확장성 용이
    16비트 숫자를 32비트로 확장하려면, Little 엔디안에서는 단순히 상위 2바이트를 0으로 채우고, 하위 2바이트에 원래 숫자를 그대로 복사하면 되므로 별도의 비트 이동이나 추가 연산이 필요하지 않아 처리 속도가 빠르다. 

2. Big-endian

낮은 주소에 높은 바이트(MBS, Most Significant Bit)부터 저장
SPARC을 포함한 대부분의 RISC CPU 계열에서 사용

  • 사람이 이해하기 쉬운 순서
    상위 바이트가 낮은 주소부터 순차적으로 저장되어 우리가 일반적으로 숫자를 사용하는 선형 방식이다. 메모리에 저장된 순서 그대로 데이터를 읽을 수 있어 이해하기 쉽다. 

  • 네트워크 전송에서의 일관성
    네트워크 프로토콜은 보통 Big-endian 방식을 사용하는데 이는 데이터의 크기와 상관없이 항상 상위 바이트부터 전송하기 때문에, 서로 다른 시스템 간에 데이터를 주고받을 때 일관성이 유지된다. 배열처럼 연속된 데이터 블록을 전송할 때 이 순서가 유지되어야 하는 경우 유리하다.

 

 


바이트 저장 순서 확인

32 비트 정수형 변수 'test' 선언 후 16진수 0x12345678로 초기화 정수 test의 주소를 char* 타입의 포인터 ptr에 저장 (여기서 char*로 변환한 이유는 char가 1바이트 이므로 ptr을 통해 1바이트씩 데이터에 접근하기 위함) int는4바이트 이므로 sizeof(int)는4가 되고 반복문은 4번 반복된다. ptr[i]는 test 변수의 각 바이트를 차례대로 읽어오며 16진수 형태로 출력

 

값을 하위 바이트부터 출력하므로 Little-endian 시스템인 것을 알 수 있다.


관련 함수

파이썬에서 정수를 바이트 배열로 변환하는 메서드 변환할 바이트 배열의 수(length), byteorder(little OR big), 부호 여부 설정 가능

 

1024

= 2^10

= 2^2 x 2^4 x 2^4

=> 0x400

= 0x0400 (2byte 배열로 출력하라고 했으므로)

 

Big-endian의 경우 상위 비트부터 두 개씩 0x04 0x00

Little-endian의 경우 하위 비트부터 두 개씩 0x00 0x04

'기타' 카테고리의 다른 글

ASCII, Unicode  (0) 2024.08.10