Programming/C Programming
[TIP] easy mistake casting buffer
decdream
2009. 9. 21. 16:37
사이즈가 다른 배열을 케스팅 하면 어떨게 될까?
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