지식/MCU지식

엔디안이란?(빅엔디안, 리틀엔디안)

원원 2023. 3. 26. 00:11

안녕하세요 오늘은 엔디안에 대해 알아보겠습니다.

엔디안이란 데이터에 여러 바이트가 있는 경우 바이트 순서를 정하는 규칙입니다.

빅 엔디안(big endian)과 리틀 엔디안(little endian)두가지 방법이 있습니다.

 

리틀 엔디안은 숫자의 하위 바이트가 메모리의 최하위 주소에 저장되고 상위 바이트가 최상위 주소에 저장됨을 의미합니다.

빅 엔디안은 숫자의 상위 바이트가 최하위 주소에 저장되고 하위 바이트가 최상위 주소에 저장됨을 의미합니다.

 

 

STM32는 일반적으로 리틀 엔디안 형식입니다

 

실제로 빌드된 STM32의 메모리값을 보겠습니다.

볼 메모리 값은 _estack입니다

_estack은 ORIGIN(RAM) + LENGTH(RAM)이므로 0x20005000입니다.

.bin파일을 HxD에디터로 열어봤습니다(HxD다운: https://mh-nexus.de/en/hxd/)

리틀 엔디안방식으로 0x20005000값이 저장된걸 볼 수 있습니다.

 

 

아래의 코드는 바이트의 순서를 변경하는 코드입니다

#include <stdio.h>

int main() {
    int input = 0x12345678;
    int result=0;
    
    printf("input : 0x%x \r\n", input);
    for (int j = 0; j < 4; j++) {
        result |= ((input << (j * 8)) & 0xFF000000) >> ((3-j)*8);
    }
    printf("result : 0x%x \r\n", result);
    return 0;
}

------------실행결과------------
input : 0x12345678
result : 0x78563412
------------------------------------

'지식 > MCU지식' 카테고리의 다른 글

MCU-Open drain 알아보기  (0) 2023.10.15
ARM 명령어 아키텍처  (1) 2023.04.23
MCU GPIO 전류 측정하기  (0) 2023.01.23
UART통신 알아보기  (1) 2022.12.24
MCU-push pull 알아보기  (0) 2022.06.02