Posted on 2008-07-09 18:05
eyesmart 阅读(665)
评论(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)));
}