在操作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]),访问该地址开始的第一个字节