Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
05-16 04:51
관리 메뉴

nomad-programmer

[C] 1byte씩 읽는 포인터, 리틀 엔디안, 빅 엔디안 본문

Programming/C

[C] 1byte씩 읽는 포인터, 리틀 엔디안, 빅 엔디안

scii 2020. 6. 9. 18:01
// 총 4바이트
0x12345678

빅 엔디안

- 리눅스, 유닉스 등은 빅 엔디안 방식이다. 큰 수의 비트부터 읽어 들이고 메모리에 저장할 때도 마찬가지로 큰 비트를 먼저 메모리에 올린다.

즉, 위의 16진수 같은 값이 있다면 0xAAA1 주소에 0x12가 올라가고 그 다음 0xAAA2 주소에 0x34 값이 올라가고 그 다음 0XAAA3 주소에 0x56 값이 올라가고 마지막 0x78은 0xAAA4 주소에 올라간다.

0xAAA4

0x78

0xAAA3

0x56

0xAAA2

0x34

0xAAA1

0x12

위의 표 처럼 메모리에 올라간다.

 

리틀 엔디안

- 윈도우즈는 리틀 엔디안 방식이다. 작은 수의 비트부터 읽어 들이고 메모리에 저장할 때도 마찬가지로 작은 비트를 먼저 메모리에 올린다.

0xAAA4

0x12

0xAAA3

0x34

0xAAA2

0x56

0xAAA1

0x78

이렇게 운영체제마다 달라서 네트워크로 데이터를 전송 시, 유의해야 한다.

 

1Byte씩 읽어 들이는 포인터 연산 예제

int main(void){
    int data = 0x12345678;
    // char형 포인터이므로 data의 주소 값도 char 포인터 형으로 변환
    char* ptr = (char*)&data;
    
    for(int i=0; i<4; i++){
    	printf("%x, %d \n", *ptr, *ptr);
        // 포인터 연산. char형 이므로 1바이트씩 건너뛴다.
        ptr++; 	
    }
    
    return 0;
}

/* 결과
78, 120
56, 86
34, 52
12, 18
*/

windows 시스템에서 실행, 리틀 엔디안 방식이므로 위의 결과 처럼 나왔다.

'Programming > C' 카테고리의 다른 글

[C] atoi 함수 예제  (0) 2020.06.10
[C] void 형 포인터  (0) 2020.06.09
[C] const (상수화)  (0) 2020.06.09
[Programming/C] Linux에서 Buffer 비우는 방법  (3) 2020.01.07
[Programming/C] scanf_s (scanf) 함수의 리턴 값  (0) 2019.12.24
Comments