首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Linux C 网络编程——1. 大端序跟小端序

2013-10-31 
Linux C 网络编程——1. 大端序和小端序1. 字节序数据在内存中有2种存放方式:大端序(Big-Endian):低位字节放

Linux C 网络编程——1. 大端序和小端序
1. 字节序

数据在内存中有2种存放方式:

大端序(Big-Endian):低位字节放在高位地址

小端序(Little-Endian):相反

x86系列则采用little endian方式存储数据

如:0x12345678

数据以8bit位单位,在内存中的存储如下:

Big Endian
   低地址                                            高地址
   ----------------------------------------->
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     12     |      34    |     56      |     78    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Little Endian
   低地址                                            高地址
   ----------------------------------------->
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     78     |      56    |     34      |     12    |

   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+


2. 网络中的字节序

TCP/IP协议规定,网络数据流应采用大端字节序,即先收到的放在高位,后受到的放在低位


3. 字节序转化

头文件:arpa/inet.h

#include <stdio.h>void main(){short s =  0x0102;short *p = &s;if( *( (char*)p ) == 0x01 ) //0x0201printf( "This is big-endian.\n" );else if (*( (char*)p ) == 0x02 )//0x0102printf( "This is little-endian.\n" );elseprintf( "Unknown.\n" );return 0;}

4. 参考文献

[1] 字节序 http://zh.wikipedia.org/wiki/%E5%A4%A7%E7%AB%AF%E5%BA%8F#.E5.A4.A7.E7.AB.AF.E5.BA.8F

[2] 字节序(Endian),大端(Big-Endian),小端(Little-Endian)http://www.cppblog.com/tx7do/archive/2009/01/06/71276.html







热点排行