posts - 8, comments - 12, trackbacks - 0, articles - 0
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

字节排序

Posted on 2008-07-09 18:05 eyesmart 阅读(668) 评论(0)  编辑 收藏 引用 所属分类: Basic Knowledge
      Big-endian和Little-endian是用来表述一组有序的字节数存放在计算机内存中时的顺序的术语。Big-endian是将高位字节(序 列中最重要的值)先存放在低地址处的顺序,而Little-endian是将低位字节(序列中次要的值)先存放在低地址处的顺序。在使用 Big-endian顺序的计算机中,要存储一个十六进制数4F52所需要的字节在内存中的排列顺序将会是4F52。而在使用Little-endian顺序的系统中,存储的顺序将会是524F。IBM的370大型机、大多数基于RISC的计算机,Motorola的微处理器以及TCP/IP协议使用的是Big-endian顺序。而 Intel的处理器和DEC公司的一些程序则使用的Little-endian方式。所以在进行网络协议编程的时候,要注意这种数据在不同CPU上的可移植性,特别是在传输二进制数值方面,而一般网络程序中的排列尽可能是Big-endian,判断这个很简单,随便找个数来试下,比如

bool IsLittleEndian()
{          
            unsigned short a = 0x0102;          
            byte *b = (byte *)&a;          
            if(*b == 0x02)                  
                     return true;          
            else                  
                     return false;
}  
而用下面这段代码可以把Little-endian转化为Big-endian (用于基本类型)
template <typename T>
static void LittleToBig(byte *buf, T value)
{          
            int size = sizeof(T);                  
            for(int i=0; i<size; i++)              
                     buf[i] = (byte)(value>>(8*(size-i-1)));
}

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理