读书人

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

发布时间: 2013-10-31 12:03:52 作者: rapoo

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







读书人网 >编程

热点推荐