일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- dart 언어
- 포인터
- 유니티
- gitlab
- C# delegate
- Unity
- Python
- c# winform
- c# 추상 클래스
- C언어 포인터
- vim
- 도커
- 플러터
- Algorithm
- Houdini
- docker
- github
- Flutter
- c언어
- HTML
- Data Structure
- c#
- 다트 언어
- jupyter
- 깃
- 구조체
- c# 윈폼
- jupyter lab
- C++
- git
Archives
- Today
- Total
nomad-programmer
[C] 1byte씩 읽는 포인터, 리틀 엔디안, 빅 엔디안 본문
// 총 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