Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1591057
  • 博文数量: 441
  • 博客积分: 20087
  • 博客等级: 上将
  • 技术积分: 3562
  • 用 户 组: 普通用户
  • 注册时间: 2006-06-19 15:35
文章分类

全部博文(441)

文章存档

2014年(1)

2012年(1)

2011年(8)

2010年(16)

2009年(15)

2008年(152)

2007年(178)

2006年(70)

分类: C/C++

2010-04-12 17:49:33

一、字节序定义

字节序,顾名思义字节的顺序,再多说两句就是大于一个字节类型 的数据在内存中的存放顺序(一个字节的数据当然就无需谈顺序的问题了)。

其实大部分人在实际的开发中都很少会直接和字节序打交道。唯有 在跨平台以及网络程序中字节序才是一个应该被考虑的问题。

在所有的介绍字节序的文章中都会提到字节序分为两类:Big- Endian和Little-Endian。引用标准的Big-Endian和Little-Endian的定义如下:
a) Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。
b) Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。

二、维基百科解释

字节序,又称端序尾序,英文:Endianness。在领域中,字节序是指存放多字节数据的(byte) 的顺序,典型的情况是整数在中的存放方式和的传输顺序。Endianness有时候也可以用指位序(bit)。

一般而言,字节序指示了一个字符的哪个字节存储在低地址。如果在的前面,即LSB为低地址,则该字节序是小端序;反之则是大端序。在网 络编程中,字节序是一个必须被考虑的因素,因为不同的处理器体系可能采用不同的字节序。在多平台的代码编程中,字节序可能会导致难以察觉的。

三、转换代码


DWORD ToLittleEndian(DWORD dwBigEndian)
{
    BYTE* p = (BYTE*)&dwBigEndian;
    return (DWORD)(p[0] << 24) + (DWORD)(p[1] << 16) +
        (DWORD)(p[2] << 8) + (DWORD)p[3];
}


以上代码不仅适合大端向小端转换,也适合从小端到大端转换。

author: thinker
e-mail: cnhnyugmail.com
qq: 94483026
阅读(2072) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~