반응형
비트(bit)란 컴퓨터가 데이터를 처리하기 위해 사용하는 데이터의 최소 단위이다.
바이트(byte)는 한 문자를 표한할 수 있는 최소 단위로 8비트로 구성되어있다. (1Byte = 1Bit)
컴퓨터는 데이터를 바이트 단위로 저장하고
연속되는 바이트를 저장하는 순서가 바로 바이트 배열 순서(Byte Order)이다.
데이터는 낮은 주소에서 높은 주소 차례로 저장되지만
이 데이터가 저장되는 순서에 따라 빅 엔디안과 리틀 엔디안이 나뉜다.
빅 엔디안 Big-Endian
상위 비트부터 바이트 단위로 저장하는 방식으로 평소 사람이 숫자를 사용하는 방식과 같은 방식이다.
큰 자리 수부터 저장하기 때문에 숫자 비교에 유리하고 저장된 순서 그래도 읽을 수 있어 이해가 용이하다.
리틀 엔디안 Little-Endian
하위 비트부터 바이트 단위로 저장하는 방식
자리 올림 수 여부를 판단하기 용이하여 수학적 연산에 유리하다.
반응형
보통 우리가 사용하는 컴퓨터는 인텔 기반의 윈도우인데 대부분의 인텔 CPU 계열에서는 리틀 엔디안 방식을 사용한다.
하지만 네트워크를 통해 데이터를 전송할 때는 빅 엔디안 방식이 사용된다.
이러한 이유로 소켓 통신을 구현할 때,
빅 엔디안과 리틀 엔디안의 개념을 이해하고 바이트 순서를 고려하여 데이터를 전송하여야 한다.
만약 바이트 순서에 따른 변환을 거치지 않고 데이터를 전송한다면 잘못된 데이터가 전송될 것이다.
바이트 순서를 변환하기 위해서는 아래의 Byte Ordering 함수를 사용해야한다.
빅 엔디안 Big-Endian 변환 함수
- htons (host to network short) - 16비트 수량을 리틀 엔디안에서 빅 엔디안으로 변환
- htonl (host to network long) - 32비트 수량을 리틀 엔디안에서 빅 엔디안으로 변환
리틀 엔디안 Little-Endian 변환 함수
- ntohs (netowork to host short) - 16비트 수량을 빅 엔디안에서 리틀 엔디안으로 변환
- ntohl (network to host long) - 32비트 수량을 빅 엔디안에서 리틀 엔디안으로 변환
함께 보면 좋은 글 ▽
반응형
'개념' 카테고리의 다른 글
[C++] 참조자 개념 (2) const 참조자와 참조형을 반환하는 함수 (3) | 2022.09.30 |
---|---|
[C#] 클래스의 메모리 할당 (Stack, Heap) (1) | 2022.09.20 |
[개념] 메모리의 구조 (0) | 2022.09.20 |
[C++] 참조자 개념 (1) 참조자와 Call-by-reference (0) | 2022.09.20 |
[개념] 구조체 패딩 (Struct Padding) (1) | 2022.04.15 |
댓글