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

Byte Order, Little Endian, Big Endian, MSB, LSB. 쓰레기 용어

by i.got.it 2016. 2. 7.

 

 

개요

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

리틀엔디안 빅엔디안 용어 자체는 걸리버 여행기에 나오는 계란 뭉퉁한 쪽을 먼저 까는  파를 빅엔디안, 뽀족한 쪽을 먼저 까는 파를 리틀 엔디안이라고 하는 것에서 가져온 용어. (참고로 나는 계란 옆구리  부터 깐다.)


메모리에 1바이트 단위 로 배치 할 때 메모리 주소의 작은 것에 최상위 바이트를 배치하는 것을 빅엔디안, 메모리 주소 작은것에 최하위 바이트를 배치하는것을 리틀 엔디안이라고 하는데... 하 ...  그냥 MSB first , LSB first 라고 하면 혼선없이 명확하게 다 표현 가능하고 사람들 간에 혼선없이 공유 가능 함에도...  쓰잘데기 없이 혼선 가중 시키는 문학적 용어 남발 하지마라. 오히려 더 지저분 해지고 혼선만 가중시킨다. 이 분야는 문학이 아니고 과학, 공학 영역이다. 빡대가...

 

비슷한 용어 오염 된 사례: 패킷 , 프레임, 블럭, 

특히 패킷은 바이트 덩어리면 다 패킷이라 부르고 있다. . 용어정의 오염도가 제일 심한 용어이니 주의. 

그나마 프레임이 용어 오염 덜하다. 통신 경로에서 처리단위를 프레임이라고 하는 것이 일관되게 유지되고 있음. 

그외 청크 , 블럭, 패킷은 그냥 전부 대충 바이트열 덩어리개념임. 

 

문학적 베리에이션 (문장에서 동일한것을 지칭하는 용어를 다르게 하는 것 ) 따위는 공학, 과학에는 제발 적용하지 마라 . 개판 만드는 주범이다. 

 

 

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) 시스템이다.

 

 

댓글



비트코인




            암호화폐/외환/나스닥/골드          
       
현물 |선물 인버스 |선물 USDT , bybit MT5               프랍 트레이딩. MT4,MT5