개발자공부일기
빅 엔디안 & 리틀 엔디안 본문
비트(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 |