unsigned long aaa = 0x01FF0002;
unsigned char* pCh = (unsigned char*)&aaa;
unsigned short* pWd = (unsigned short*)(pCh+1);
printf("+++++ %x, %x\n", *pCh, *pWd);
+++++ 2, ff00
+++++ 1, 00ff
+++++ 2, 3d8f
Posted by 슴갈
unsigned long aaa = 0x01FF0002;
unsigned char* pCh = (unsigned char*)&aaa;
unsigned short* pWd = (unsigned short*)(pCh+1);
printf("+++++ %x, %x\n", *pCh, *pWd);
+++++ 2, ff00
+++++ 1, 00ff
+++++ 2, 3d8f
Posted by 슴갈
Trackback URL : http://avej.com/textcube/trackback/8
Mahavishnu
2009/03/06 18:01
#
M/D
Reply
Permalink
엔디안 문제에 대한 정답이 알고싶습니다.
저도 범용 코딩 스타일을 지향하는지라 . .
저런 경우에는 어떤 방식으로 구현하는 것이 좋은지요?
슴갈
2009/03/15 10:30
#
M/D
Permalink
엔디안 문제의 정답은 '항상 원래 정의한 type만 사용하며, 그 type의 각각의 바이트를 제어하기 위해서는 shift와 masking을 이용한다'로 정의하면 되지 않을까 생각합니다. 위의 예의 경우에도 원래의 type인 unsigned long에서 masking으로 값을 뽑아야 하고요.
단, 파일에 저장되는 경우에는 파일 포맷에 사용한 엔디안을 명시해야겠지요.
little endian 명시 예: BMP 파일 등
big endian 명시 예: PNG 파일 등
둘 다 가능하지만 헤더에 명시: JPEG의 EXIF 등
유객주
2011/01/23 19:55
#
M/D
Reply
Permalink
big endian 결과가 +++++ 1, 00ff
로 나왔는데,
제 생각에는
+++++ 1, ff00 이어야 할 것 같은데요.
왜냐하면 big endian일 때 메모리 순서상 01FF0002로 저장되고 ff00 두 바이트를 big endian으로 읽으면 그 순서대로이므로, ff00로 나오지 않을까요?
GP2X WIZ와 CAANNO와 bada용 게임 개발을 하자
- 슴갈
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |