본문 바로가기
VisualStudio.C++.C#/코딩팁,함수활용,단편

Byte Order, Little Endian, Big Endian, MSB, LSB

by 리치굿맨 2016. 2. 7.

 

 

개요.

 

2바이트 이상의 자료형을 메모리에 저장할 때 저장 최소단위 1바이트 단위 저장시 메모리 주소 작은 곳부터 LSB 먼저 저장되는지, 혹은 MSB 먼저 저장 되는지 단일하고 확고한 표준이 없고, 서로 반대되는 순서인 Little Endian, Big Endian 이 혼재되어있다.

 

 

 

 

 

 

Little Endian, Big Endian

 

2바이트 이상 변수의 데이터를 바이트 단위로 분리 저장시 메모리의 작은 주소에 LSB가 먼저 배치되는 Little Endian, MSB가 먼저 배치되는 Big Endian 방식이 있다.

 

상세.

아래 처럼 4바이트 정수 byte_4 라는 변수에 16진수 0xDDCCBBAA 라는 값을 대입했다고 하자. 

 

uint32_t byte_4 = 0xDDCCBBAA; // 10진수 3721182122  의 16진수 표현.

 

숫자 0xDDCCBBAA 가 메모리에 저장될 때는 1바이트 단위 (즉,0xDD, 0xCC, 0xBB, 0xAA )로 잘려서 저장되게된다.

 

Little Endian 방식.

메모리의 작은 주소에 저장대상 숫자의 LSB(Least Significant Byte) 부터 먼저 배치되는 방식.

 

Big Endian 방식.

메모리의 작은 주소에 저장대상 숫자의 MSB(Most Significant Byte) 부터 먼저 배치되는 방식.

 

 메모리 주소 ->

주소 N  

주소 N+1 

주소 N+2 

 주소 N+3 

 Little Endian 방식.

 LSB first

0xAA 

0xBB 

0xCC 

0xDD 

 Big Endian 방식.

 MSB first

0xDD 

0xCC 

0xBB 

0xAA 

 

 나의 타겟시스템의 Byte Order 확인하는 방법

 인텔 CPU 이면 Little Endian 이 사용되고 있다고는 하나, 임베디드 시스템 등 타겟 시스템을 여러 기종을 핸들링 하는 경우 바이트 순서를 명확히 파악해둬야 한다. 메뉴얼 찾아 보는것보다 코드로 타겟 시스템에서 직접 확인해보는게 가장 빠르고 확실한 방법이다.

 

확인 코드예.

 uint32_t byte_4 = 0xDDCCBBAA;

 uint8_t * p_byte1 = (uint8_t*)(&byte_4);  

 

위와같이 정의된 p_byte1 에 저장된 값(*p_byte1)을 확인하여 0xAA 가 출력된다면 LSB first (=Little endian) 시스템이고, 0xDD 가 출력되었다면 MSB first ( = Big endian) 시스템이다.

 

 

 



 본 글이 포함된 상위 정리 장소.

 

 Visual Studio/VC++/C/C# 활용정리 -> http://igotit.tistory.com/11

 

 




첫글등록 : 2016년 2월7일.

최종수정 : 


본글단축주소 : https://igotit.tistory.com/657







 

 

 

 

댓글0


   
현물 |선물 인버스 |선물 USDT     현물 | 선물 USDT |봇제작툴/카피트레이딩     현물 |선물 인버스 |선물 USDT     선물 인버스 |선물 USDT