请问下,关于数据类型转换的问题。。
使用的是NEC的K0系列的单片机+IAR4.62在使用中发现一个很奇怪的问题。。。
比如定义了一个数组unsigned char a[] = {0x01,0x02,0x03,0x04,0x05};和一个unsigned int b;
想把其中的数据转换为16位数据时。
比如 b = *((unsigned int)(a+1));得到的结果是0x0203
而b = *((unsigned int)(a+2))得到的结果是0x0203
这是怎么回事呢,是程序写法不对,还是编译器设置问题,还是因为单片机的问题呢。。。
知道的朋友帮忙解释下,谢谢!
//上面写错了。。。
//之前写错了,实际如下
unsigned char a[] = {0x01,0x02,0x03,0x04,0x05};
unsigned int b;
b = *((unsigned int*)(a+1));得到的结果是0x0302
b = *((unsigned int*)(a+2));得到的结果是0x0203 语法错误。类型不匹配。
unsigned char a[] = {0x01,0x02,0x03,0x04,0x05};
unsigned int b,c;
b = *((unsigned int *)(a+1));
c = *((unsigned int *)(a+2));
这样 b中的值是 0x0302
c中的值是 0x0403
(unsigned int *) (a+2) 含义是 对unsigned char类型的地址 (a+2)强迫成 unsigned int 类型的地址 回复【1楼】xuesheng
-----------------------------------------------------------------------
谢谢,是我把问题发错了。。。
页:
[1]