개발자공부일기

빅 엔디안 & 리틀 엔디안 본문

TIL(Today I Learned)

빅 엔디안 & 리틀 엔디안

JavaCPP 2025. 2. 3. 21:21

비트(bit)란 컴퓨터가 데이터를 처리하기 위해 사용하는 데이터의 최소 단위이다.

바이트(byte)는 한 문자를 표한할 수 있는 최소 단위로 8비트로 구성되어있다. (1Byte = 1Bit)

 

컴퓨터는 데이터를 바이트 단위로 저장하고

연속되는 바이트를 저장하는 순서가 바로 바이트 배열 순서(Byte Order)이다.

 

데이터는 낮은 주소에서 높은 주소 차례로 저장되지만

이 데이터가 저장되는 순서에 따라 빅 엔디안과 리틀 엔디안이 나뉜다.

빅 엔디안 Big-Endian

여러 개의 연속된 데이터를 1차원의 기억장치 최상위 공간(MSB)부터 차례로 배열하는 기법 으로 평소 사람이 숫자를 사용하는 방식과 같은 방식이다. 큰 자리 수부터 저장하기 때문에 숫자 비교에 유리하고 저장된 순서 그래도 읽을 수 있어 이해가 용이하다.

 

리틀 엔디안 Little-Endian

여러 개의 연속된 데이터를 1차원의 기억장치 최하위 공간(LSB)부터 차례로 배열하는 기법  자리 올림 수 여부를 판단하기 용이하여 수학적 연산에 유리하다.

 

 

보통 우리가 사용하는 컴퓨터는 인텔 기반의 윈도우인데 대부분의 인텔 CPU 계열에서는 리틀 엔디안 방식을 사용한다.

하지만 네트워크를 통해 데이터를 전송할 때는 빅 엔디안 방식이 사용된다.

 

변환방법

 바이트 배열로 변환 : 데이터를 바이트 배열로 변환한다. 이 과정에서 바이트배열의 인덱스를 사용하여 데이터를 접근

 바이트 배열의 순서 변경 : (C#에서는) 리틀엔디안에서는 바이트 배열의 순서를 그대로 사용하고, 빅엔디안에서는 바이트배열을 거꾸로 사용한다.(상황에 맞게 배열)

 바이트 배열을 다시 데이터 타입으로 변환 : 바이트 배열을 다시 필요한 데이터 타입(정수, 부동소수점 등)으로 변환

코드에서 변환방법

  • 빅 엔디안(Big-Endian) 변환 함수
    • htos(host to network short) : 16비트 수량을 리틀 엔디안에서 빅 엔디안으로 변환
    • htonl(host to network long) : 32비트 수량을 리틀 엔디안에서 빅 엔디안으로 변환

  • 리틀 엔디안(Little-Endian) 변환 함수
    • ntohs(network to host short) : 16비트 수량을 빅 엔디안에서 리틀 엔디안으로 변환
    • ntohl(network to host long) : 32비트 수량을 빅 엔디안에서 리틀 엔디안으로 변환

'TIL(Today I Learned)' 카테고리의 다른 글

프로세스와 스레드, 컨텍스트 스위칭  (0) 2025.01.27
패킷에 헤더 붙여서 전송하기  (0) 2025.01.24
프로그래머스 문제:타켓 넘버  (0) 2025.01.23
oneof  (0) 2025.01.22
게임 서버 아키텍처  (0) 2025.01.20