首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

怎的理解(((unsigned char *)&argument)[0]); argument为 long型

2012-07-31 
怎样理解(((unsigned char *)&argument)[0]); argument为 long型在操作sd卡时总会看到C/C++ codevoid SdCo

怎样理解(((unsigned char *)&argument)[0]); argument为 long型
在操作sd卡时总会看到

C/C++ code
void SdCommand(unsigned char command, unsigned long argument, unsigned char CRC){    SdWrite(command|0x40);    SdWrite(((unsigned char *)&argument)[0]);    SdWrite(((unsigned char *)&argument)[1]);    SdWrite(((unsigned char *)&argument)[2]);    SdWrite(((unsigned char *)&argument)[3]);


执行了 (((unsigned char *)&argument)[0]); 是否就自动转成字节了?为什么? argument是long型,即4字节。

[解决办法]
如果是大端模式,假设argument=0x12345678,其地址是0x10

地址 值 uchar buf[4]
0x10 0x78 buf[0] 
0x11 0x56 buf[1]
0x12 0x34 buf[2]
0x13 0x12 buf[3]
(((unsigned char *)&argument)[0]);

第一步
&argument,得到其地址0x10

第二步
(unsigned char*)&argumen
将其地址转换成一个uchar型的指针(或者说是一个uchar型的数组)

第三步
(((unsigned char *)&argument)[0])
加下标[0],得到第二步转换的数组的第一个元素,上面的是0x78 


 
[解决办法]
在32位编程模式下
&argument 得到的地址是 4个字节 0xABCDABCD

(unsigned char*)&argumen
将其地址转换成一个uchar型的指针,这样就可以按照字节访问地址了

(((unsigned char *)&argument)[0]),访问该地址开始的第一个字节

热点排行