阅读:1474回复:5
有关KEILC51一个问题请教
大家好,我在看CY开发板的FIMEWARE资料时发现有一个宏定义,我想来想去也不知道它是实现什么功能,因此请教大家
#define SWAP_ENDIAN(word) ((BYTE*)&word)[0] ^= ((BYTE*)&word)[1];\\ ((BYTE*)&word)[1] ^= ((BYTE*)&word)[0];\\ ((BYTE*)&word)[0] ^= ((BYTE*)&word)[1] 它等式两边是数据呢,还是指向字节的指针呢,还有为什么要进行异或呢 |
|
最新喜欢:![]() |
沙发#
发布于:2002-08-05 20:22
有些系统是高位在前,低位在后,但有的系统相反,估计是实现此类功能的
|
|
板凳#
发布于:2002-08-05 20:20
就是将一个WORD中的两个字节交换,&WORD是WORD的地址,转换成BYTE指针后成了BYTE[2]的数组,自己运算一下应清楚了
|
|
地板#
发布于:2002-08-05 16:40
楼上的老兄说清楚点吧
|
|
地下室#
发布于:2002-08-05 16:01
实现的是大小结尾的交换
|
|
5楼#
发布于:2002-08-05 14:19
我的观点:
将word的高低字节互换(SWAP),(*byte(&word))是取word的值,((BYTE*)&word)[0] 为低8位,((BYTE*)&word)[1]为高8位。根据 等式可得,[0]=[0]^[1]; [1]=[1]^([0]^[1])=[0]; [0]=([0]^[1])^([1]^[0]^[1])=[0]^[1]^[0]=[1]; 从而达到互换的目的。此等式的特点是算法较繁,但没有定义额外的RAM保存中间变量。 |
|
|