- 29
- 6月
想用IAR的C语言来该问一下LONG型变量的4个Byte,版本是IAR720H的。
最初,按照最直观的写法,用这种方法来进行访问:
(unsigned char)(num)<br />
(unsigned char)(num>>8)<br />
(unsigned char)(num>>16)<br />
(unsigned char)(num>>24)
编译,查看lst文件。what??这是什么呀!!
居然出现了?UL_SHR。
你还真去右移了呢?
接下来,换用第二种方式:
((unsigned char *)&num)[0]<br />
((unsigned char *)&num)[1]<br />
((unsigned char *)&num)[2]<br />
((unsigned char *)&num)[3]
这下,问题更大了。
什么DPTR都来了。这个更夸张。
差点都想自己写汇编算了。
最后经过了许多实验,总算把方法试出来了。
可以定义以下的宏:
#define BYTE0(n) ((unsigned char)(n))<br />
#define BYTE1(n) ((unsigned char)((n)>>8))<br />
#define BYTE2(n) ((unsigned char)(((unsigned short)((n)>>8))>>8))<br />
#define BYTE3(n) ((unsigned char)(((unsigned short)((n)>>16))>>8))
以后就可以直接用BYTE0 ~ BYTE3来进行LONG型变量的按BYTE来访问了。
我喜欢,顶一个!