사이즈가 다른 배열을 케스팅 하면 어떨게 될까?
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");
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 |