엔디언(Endian)이란?
엔디언(Endian)은 컴퓨터의 메모리와 같은 1차원의 공간에 여러 개의 연속된 대상을 배열하는 방법을 뜻하며, 바이트를 배열하는 방법을 특히 바이트 순서(byte order)라고 한다.
엔디언은 보통 큰 단위가 앞에 나오는 빅 엔디언(Big-endian)과 작은 단위가 앞에 나오는 리틀 엔디언(Little-endian)으로 나눌 수 있으면, 두 경우에 속하지 않거나 둘을 모두 지원하는 것을 미들 엔디언(Middle-endian)이라 부르기도 한다.
빅 엔디언과 리틀 엔디언
빅 엔디언(Big-endian)
큰 단위가 낮은 메모리 주소에 들어간다
리틀 엔디언(Little-endian)
큰 단위가 높은 메모리 주소에 들어간다.
- 어느 한쪽이 압도적으로 좋거나 나쁘지 않음
- 인텔 프로세서는 전통적으로 리틀 엔디언을 사용
- 일반적으로 네트워크 주소는 빅 엔디언을 사용
- 빅 엔디언은 저장 순서가 배열 선언하는 순서와 동일하다. (왼쪽에서 오른쪽으로 높아짐)
- 프로그래머가 디버깅할 때 편리
- 리틀 엔디언은 하위 바이트 값만 필요할 때 편리
- CPU나 소프트웨어에 따라 두 방식을 선택해 사용
C# 예제 코드
BitConverter.IsLittleEndian를 호출하면 현재 프로세서가 리틀엔디안을 사용하는지 확인이 가능하다.
리틀엔디안을 사용한다면 배열을 반전시켜주자.
static void Main(string[] args)
{
byte[] bytes = { 0, 0, 1, 0 }; // 0 0 1 0
if (BitConverter.IsLittleEndian)
{
Console.WriteLine("Little Endian");
Array.Reverse(bytes); // 0 1 0 0
}
else
{
Console.WriteLine("Big Endian");
}
int i = BitConverter.ToInt32(bytes, 0);
Console.WriteLine(i); // 256
}
public byte[] EndianConvert(byte[] datas)
{
byte[] arr = new byte[datas.Length];
Array.Copy(datas, arr, datas.Length);
Array.Reverse(arr);
return arr;
}
'프로그래밍 > 네트워크' 카테고리의 다른 글
이더넷(Ethernet)이란 무엇인가? (2) | 2023.08.23 |
---|---|
TCP 소켓의 입출력 버퍼 (2) | 2023.08.23 |
INADDR_ANY에 대해서 (4) | 2023.08.14 |
TCP 3-way Handshake & 4-way Handshake (3) | 2023.08.14 |
Unity Mirror & Mirage 네트워크 라이브러리에 대해서 (15) | 2023.08.09 |
댓글