字节序

字节序是指多字节数据在计算机内存中存储或者网络传输时各字节的存储顺序。


小端:高地址存放高位数,低地址存放低位数,windows,linux,X86CPU

大端:高地址存放低位数,低地址存放高位数,UNIX


主机字节序跟cpu和os有关

网络字节序是大端序,跟其他无关


以下是转载的:

http://bbs.pediy.com/showthread.php?t=86362


算术运算与内存操作运算: 
   算术运算是不改变被运算数据的字节序的,此时我们不用关心所操作的数据到底是什么字节序的。但是内存操作运算就要注意了,比若我们将一个整数指针强制转换为一个字符指针类型,然后对字符指针类型的四个字节进行算数运算,此时我们必须知道是什么字节序。不然写出的代码要么是错误的,要么移植到其他机器的时候就不能正常运行。 
   常见的算术有+ - * / % & | ~ << >> = 等,请注意& | ~ << >> 这几个是算术运算而不是内存操作运算,所以他们进行混合运算的时候不用关心字节序或者位序问题。赋值运算符仅在数据类型兼容的时候才不涉及字节序问题,才能算作算术运算。 
   常见的内存操作运算有:强制转换后对碎片数据的算术运算,内存copy/write,读写文件等。 

浮点数的字节序: 
   浮点数......我也不知道应该怎么处理其字节序问题,网上也查了很久但是没有很权威的答案。对于浮点数,我建议不要直接传内存值,按照字符串传输即可。 

IP地址的字节序: 
  记住一条,IP地址的整数值,自IP地址生成的时刻起,就一定是网络字节序的,所以我们在转字节序的时候,IP 地址我们往往跳过对IP地址的字节序转换。呵呵,IP地址已经是网络字节序了,所以我们仅需要做算术赋值操作即可。 

字节序转换函数: 
   OS一般都提供htons、htonl、ntohs、ntohl这四个字节序操作函数,这些函数的目的虽然相同,而且操作后内存布局也相同,但是从算术运算的角度来看这些函数的特性是与机型相关的:在WIN下这四个函数会改变所操作的数的数值,但是在UNIX下就不回改变数据的算术值,UNIX下这些函数是空操作。这个差别也可能是为什么UNIX服务器上程序的性能会高于WIN的一个小原因。 

你可能感兴趣的:(windows,linux,网络,unix,服务器,存储)