본문 바로가기

Programming/C Programming

[TIP] easy mistake casting buffer


사이즈가 다른 배열을 케스팅 하면 어떨게 될까?

unsigned short (size 2 byte)
 0x1234  0xabcd  0x00ff  0xff00

==> casting

char (size 1 byte)
 ?  ?  ?  ?  ?  ?  ?

쉽게 다음을 생각할 수 있을것입니다.
0x12 0x34 0xab 0xcd 0x00 0xff 0xff 0x00

하지만, 결과는 다르다는것.. byte ordering 의 차이가 있기 때문이지요.

int i=0;
  unsigned short temp_data[4]={0x1234, 0xabcd, 0x00ff, 0xff00};
  unsigned char* pConData = (unsigned char*)temp_data;
  unsigned char buf[2];
  
  printk("[CAM][TEST] ");
  for(i=0 ; i<8 ; i++)
  {
   printk("%x, ", pConData[i]);
  }
  printk("\n");

 printk("[CAM][TEST2] ");
  for(i=0 ; i<4 ; i++)
  {
   buf[0] = (temp_data[i] >> 8);
   buf[1] = (temp_data[i] & 0xFF);
printk("%x, %x", buf[0], buf[1], );
  }
  printk("\n");


결과

[CAM][TEST] 34, 12, cd, ab, ff, 0, 0, ff,
[CAM][TEST2] 12, 34, ab, cd, 0, ff, ff, 0

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

__read_mostly keyword  (0) 2010.06.29
전처리기 사용 : define ##  (0) 2010.02.23
struct 변수 사용 bit 한계 설정하기  (0) 2009.12.02
AtoH function  (0) 2009.09.11
해더파일을 통한 배열 입력  (2) 2008.11.04