首页 > 编程知识 正文

字节序转换htonl,将端口号转为网络字节序

时间:2023-05-05 14:01:22 阅读:164633 作者:4851

资料来源: http://blog.chinaunix.net/u/13279/showart.PHP? id=177436

网络字节顺序和主机字节顺序

job Edward.cublog.cn 2006-09-2716336036336018

网络字节顺序和主机字节顺序

这些字节序类型因CPU而异。整数存储在内存中的顺序称为主机顺序

最常见的有两种

1. Little endian :将低位字节存储在起始地址中

2. Big endian :在起始地址中存储高位字节

生命周期

最符合人类思维的印第安人

地址低位存储值低位

地址高位存储值高位

怎么说最符合人的思维的印第安人,从人的第一观点来说

如果低位的值小,则需要放在存储器地址小的地方,即存储器地址的低位

相反,高位值应该放在存储器地址大的地方,即存储器地址的高位

BE big-endian

最直观的字节序

地址低位存储值高位

地址高位存储值低位

为什么是直觉,请不要想对应关系

只需从左到右按照从低到高的顺序写存储器地址即可

按正常从上到下的顺序导出值

比较两者,一个字节一个字节地填充

示例:如何在内存中存储双字符0x01020304(dword )

存储器地址

4000 4001 4002 4003

LE 04 03 02 01

BE 01 02 03 04

示例:将0x1234abcd写入以0x0000开头的内存后,结果将显示为

二端照明

0x00000x120xcd光盘

0x00010x230xab

0x00020xab0x34

0x00030xcd0x12

所有x86系列CPU都是little-endian的字节序。

网络字节顺序是TCP/IP规定的数据表示形式,与特定的CPU类型、操作系统等无关,可确保数据在不同的主机之间正确传输。 网络字节顺序采用big endian排序方式。

向进行变换的BSD插座提供变换的函数有以下4个

htons将无符号短类型从主机序列转换为网络序列

htonl将无符号长整型从主机序列转换为网络序列

ntohs将无符号短类型从网络序列转换为主机序列

ntohl将无符号龙类型从网络序列转换为主机序列

在使用little endian的系统上,这些函数转换字节序

在使用big endian类型的系统上,这些函数被定义为空宏

同样,应该注意的是,在网络程序开发和跨平台开发时,不仅是一种字节序,也要保证两者的解释不同会产生错误。

注:

1、网络和主机的字节转换函数:htonsntohshtonlntohl(s为short l为long h,host n为network ) )。

2、不同的CPU运行不同的操作系统,字节序也不同。 请参照下表。

处理器操作系统字节排序

阿尔法所有的Little endian

HP-PA NT Little endian

HP-PA UNIX Big endian

Intelx86littleEndian----x86系统是小端序

Motorola680x ()所有Big endian

MIPS NT Little endian

MIPS UNIX Big endian

PowerPC NT Little endian

PowerPC非NT Big endian -----PPC系统是大字节序的字节序

RS/6000 UNIX Big endian

SPARC UNIX Big endian

IXP1200 ARM核心所有Little endian

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。