37772166 发表于 2010-10-26 16:52:01

请问下,关于数据类型转换的问题。。

使用的是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

xuesheng 发表于 2010-10-26 17:12:57

语法错误。类型不匹配。

    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 类型的地址

37772166 发表于 2010-10-26 17:18:32

回复【1楼】xuesheng
-----------------------------------------------------------------------

谢谢,是我把问题发错了。。。
页: [1]
查看完整版本: 请问下,关于数据类型转换的问题。。