sunqing98
驱动牛犊
驱动牛犊
  • 注册日期2003-12-03
  • 最后登录2005-09-16
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1320回复:7

帮忙解释下程序啊,谢谢各位大哥!!

楼主#
更多 发布于:2004-03-16 09:24
#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的开发套间中的。
jiangyiyong
驱动大牛
驱动大牛
  • 注册日期2002-11-28
  • 最后登录2004-08-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-03-16 09:34
这是一段非常出色的代码,所做的是不过是将一个WORD型的变量,高8位与低8位交换一下,也就是所谓的LITTLE-ENDIAN和HIGH-ENDIAN格式互换。

如:0X5ACC-0XCC5A
我来自中国 抵制日货
jiangyiyong
驱动大牛
驱动大牛
  • 注册日期2002-11-28
  • 最后登录2004-08-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-03-16 09:37
一个数与同一个数做两次异或操作后还是这个数的本身,这样作少用了一个中间变量,运算速度也有所加快。
我来自中国 抵制日货
yyouking
驱动老牛
驱动老牛
  • 注册日期2003-12-18
  • 最后登录2020-04-28
  • 粉丝0
  • 关注0
  • 积分967分
  • 威望114点
  • 贡献值1点
  • 好评度78点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2004-03-16 17:47
提供: AT89S52+D12开发套件 W78E54+Sl811HST单片机读写U盘套件 PL2303HX-串口转USB 网站http://www.devking.cn 联系 sl811hs@yahoo.com.cn QQ:14441292
syslh3828
驱动牛犊
驱动牛犊
  • 注册日期2004-02-08
  • 最后登录2004-06-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于: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;
}
BlueDog
驱动牛犊
驱动牛犊
  • 注册日期2001-08-16
  • 最后登录2005-05-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-03-17 09:16
jiangyiyong
驱动大牛
驱动大牛
  • 注册日期2002-11-28
  • 最后登录2004-08-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-03-17 09:27
[quote]因
我来自中国 抵制日货
BlueDog
驱动牛犊
驱动牛犊
  • 注册日期2001-08-16
  • 最后登录2005-05-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-03-17 09:34
游客

返回顶部