阅读:1320回复:7
帮忙解释下程序啊,谢谢各位大哥!!
#define MSB(word) (BYTE)(((WORD)(word) >> 8) & 0xff)
#define LSB(word) (BYTE)((WORD)(word) & 0xff) #define SWAP_ENDIAN(word) ((BYTE*)&word)[0] ^= ((BYTE*)&word)[1];\(BYTE*)&word)[1] ^= ((BYTE*)&word)[0];\ ((BYTE*)&word)[0] ^= ((BYTE*)&word)[1] 尤其是后面的几句, 这段程序是cypress公司针对68013的开发套间中的。 |
|
沙发#
发布于:2004-03-16 09:34
这是一段非常出色的代码,所做的是不过是将一个WORD型的变量,高8位与低8位交换一下,也就是所谓的LITTLE-ENDIAN和HIGH-ENDIAN格式互换。
如:0X5ACC-0XCC5A |
|
|
板凳#
发布于:2004-03-16 09:37
一个数与同一个数做两次异或操作后还是这个数的本身,这样作少用了一个中间变量,运算速度也有所加快。
|
|
|
地板#
发布于:2004-03-16 17:47
强
|
|
|
地下室#
发布于:2004-03-17 00:33
首先将低8位和高8位异或,然后和高8位异或就成了低8位,和低8为异或就成了高8位
解析:一个数和1异或为取反,和0异或为保持不变 好东西我在c上试,挺好使,收藏. c代码 #include <stdio.h> #include <iostream.h> #define SWAP_ENDIAN(word) ((char*)&word)[0] ^= ((char*)&word)[1];((char*)&word)[1] ^= ((char*)&word)[0];((char*)&word)[0] ^= ((char*)&word)[1] int main(int argc, char* argv[]) { int x=0x5511; printf("原始数据:%x",x); char y=((char*)&x)[0];//x是16位的,用一个8位的指针指向x的其实地址 //就是低8位 printf("\n该数据的低8位:%x",(char)y); y=((char*)&x)[1];//8位的指针加1就是向下移8位,就是高8位 printf("\n该数据的高8位:%x",(char)y); SWAP_ENDIAN(x); printf("\n高8位和低8位互换后:%x",x); while('#'!=getchar()) ; return 0; } |
|
5楼#
发布于:2004-03-17 09:16
因
|
|
6楼#
发布于:2004-03-17 09:27
[quote]因
|
|
|
7楼#
发布于:2004-03-17 09:34
|
|