보통 데이터 패킷을 파싱할때는 메뉴얼에 나와 있는 프로토콜에 맞게 파싱하고 처리하게 됩니다. 최근에 디바이스에 올라오는 데이터 처리를 메뉴얼대로 했는데도 말도 안되는 숫자가 튀어 나오는 경우가 있었죠. 몇시간을 헤매다가 다시 하나하나 천천히 메뉴얼을 읽다가 아래와 같은 문장을 발견하게 됩니다.
흠........
little-endian
엔디언 개념은 기초적인 내용이지만, 아무 생각없이 그냥 관성적으로 빅-엔디언 개념으로 작업을 하다 보니, 몇시간을 그냥 통으로 날려버렸습니다. 기록하는 차원에서 간단하게 정리해 보도록 하겠습니다.
개념
미들 엔디언도 있지만 여기서는 빅-엔디언과 리틀-엔디언만 살펴보겠습니다. 위키피디아에 있는 내용을 한번 정리해 보도록 하겠습니다
위키피디아 (https://ko.wikipedia.org/wiki/%EC%97%94%EB%94%94%EC%96%B8)
엔디언(Endianness)은 컴퓨터의 메모리와 같은 1차원의 공간에 여러 개의 연속된 대상을 배열하는 방법을 뜻하며, 바이트를 배열하는 방법을 특히 바이트 순서(Byte order)라 한다. 엔디언은 보통 큰 단위가 앞에 나오는 빅 엔디언(Big-endian)과 작은 단위가 앞에 나오는 리틀 엔디언(Little-endian)으로 나눌 수 있으며, 두 경우에 속하지 않거나 둘을 모두 지원하는 것을 미들 엔디언(Middle-endian)이라 부르기도 한다.
....중략....
두 방법 중 어느 한 쪽이 다른 쪽과 비교해 압도적으로 좋거나 나쁘지는 않다고 알려져 있으며, 두 방법은 서로 다른 여러 아키텍처에서 서로 공존하고 있다. 그러나 x86 아키텍처가 리틀 엔디언을 쓰기 때문에, 오늘날 x86 아키텍처를 사용하는 대부분의 데스크톱 컴퓨터는 리틀 엔디언을 쓰며 이를 ‘인텔 포맷’이라 한다. 거꾸로 네트워크에서는 주소를 빅 엔디언으로 쓰는데, 역사적으로 라우팅이 전화를 거는 식으로 접두 부호로 이루어졌기 때문이다. 이의 영향으로 많은 프로토콜과 몇몇 파일 포맷이 빅 엔디언을 사용하고 있다. 모토로라 프로세서들은 일반적으로 빅 엔디언을 사용하며, ARM 프로세서들은 성능 향상을 위해 빅 엔디언과 리틀 엔디언을 선택할 수 있도록 되어 있다.
다시 정리하면 아래와 같습니다.
- 빅-엔디언 (Big-Endian) 은 최상위 바이트 (MSB - Most Significant Byte) 부터 차례로 저장하는 방식
- 리틀-엔디언 (Little-Endian) 은 최하위 바이트(LSB - Least Significant Byte) 부터 차례로 저장하는 방식
위의 데이터가 있다고 가정하고, 쉽게 설명하면
빅-엔디언 (Big-Endian) 경우는 0x0A0B0C0D 의 16진수 데이터를 0A0B0C0D 순서대로 처리하면 됩니다. 반대로 리틀-엔디언(Little-Endian) 의 경우는 0x0A0B0C0D 의 16진수 데이터를 0D0C0B0A 와 같이 역순으로 처리하면 됩니다.
오늘의 교훈.... 돌다리 두들기듯이 메뉴얼을 꼼꼼히 읽자
'주저리주저리' 카테고리의 다른 글
2024년 독서 완료 목록 (0) | 2024.03.02 |
---|---|
2023년 독서 완료 목록 (0) | 2023.03.13 |
2020년 한해 읽었던 IT 블로그, 문서 및 기사 목록 (0) | 2020.09.27 |
2019년 한해 읽었던 IT 블로그, 문서 및 기사 목록 (0) | 2020.01.01 |
깃허브 블로그 협업하기 (0) | 2019.10.11 |
Hexo 로 github 블로그 만들기 (Hueman 테마) (0) | 2019.10.11 |
영어 공부 (0) | 2019.05.17 |
큐브리드 2009년 7월 정기교육 - 개발자 과정 (0) | 2009.07.03 |
댓글