Chinaunix首页 | 论坛 | 博客
  • 博客访问: 537087
  • 博文数量: 70
  • 博客积分: 3162
  • 博客等级: 中校
  • 技术积分: 850
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-23 13:30
文章分类
文章存档

2013年(1)

2012年(4)

2011年(1)

2010年(7)

2009年(9)

2008年(20)

2007年(3)

2006年(25)

分类: LINUX

2006-04-29 14:32:41

    在开发网络通信程序或者在某些嵌入式平台写程序时,经常遇到bigendian和littleendian的数据存储问题,一般都要做对应的转化才能保证数据的一致,下面就是我近期看到的一段具体的代码实现方式:
// code from bits/byteswap.h (C) 1997, 1998 Free Software Foundation, Inc.
#define bswap_32(x) \
     ((((x) & 0xff000000) >> 24) | (((x) & 0x00ff0000) >>  8) | \
      (((x) & 0x0000ff00) <<  8) | (((x) & 0x000000ff) << 24))

static inline uint64_t ByteSwap64(uint64_t x)
{
    union {
        uint64_t ll;
        uint32_t l[2];
    } w, r;
    w.ll = x;
    r.l[0] = bswap_32 (w.l[1]);
    r.l[1] = bswap_32 (w.l[0]);
    return r.ll;
}
这样就实现了数据的转化。
对于别的64位类型的变量也
可以类似这样来处理。
阅读(1899) | 评论(3) | 转发(0) |
给主人留下些什么吧!~~