dtcms Nginx配置 底层架构 MongoDB android教程 canal安装 recursion datatable linktosql float占几个字节 oracle查看数据库 matlab颜色代码 idea导入多个项目 图片生成链接 mysql函数 python操作mongodb python安装mysql python下载安装教程 python抛出异常 java正则 怎么配置java环境 linux服务器 python网站开发实例 莫愁脚本 莫莫小工具 exescope教程 小米5c拆机 华为线刷工具 saminside mac画图工具 pr放大画面 linux安卓模拟器 复仇之矛天赋 暴力猴 饥荒黄油 下拉框默认选中 苹果电脑怎么收藏网页 rdpwrap ps文字旋转任意角度 汉仪黑荔枝体简
当前位置: 首页 > 学习教程  > 编程语言

主机序和网络序

2020/8/31 13:46:23 文章标签:

不同的CPU有不同的字节序类型 这些字节序是指整数在内存中保存的顺序 这个叫做主机序 
最常见的有两种:
1. Little endian:将低序字节存储在起始地址 
2. Big endian:将高序字节存储在起始地址 

LE little-endian 
最符合人的思维的字节序 
地址低位存储值的低位 
地址高位存储值的高位 

BE big-endian 
最直观的字节序 
地址低位存储值的高位 
地址高位存储值的低位 

例子:在内存中双字0x01020304(DWORD)的存储方式 

内存地址 
4000 4001 4002 4003 
LE 04 03 02 01 
BE 01 02 03 04 

 

网络字节顺序是TCP/IP中规定好的一种数据表示格式,它与具体的CPU类型、操作系统等无关,从而可以保证数据在不同主机之间传输时能够被正确解释。网络字节顺序采用big endian排序方式。 

为了进行转换 bsd socket提供了转换的函数 有下面四个 
htons 把unsigned short类型从主机序转换到网络序 
htonl 把unsigned long类型从主机序转换到网络序 
ntohs 把unsigned short类型从网络序转换到主机序 
ntohl 把unsigned long类型从网络序转换到主机序 

在使用little endian的系统中 这些函数会把字节序进行转换 
在使用big endian类型的系统中 这些函数会定义成空宏 

同样 在网络程序开发时 或是跨平台开发时 也应该注意保证只用一种字节序 不然两方的解释不一样就会产生bug.

 

注: 
1、网络与主机字节转换函数:htons ntohs htonl ntohl (s 就是short l是long h是host n是network)


本文链接: http://www.dtmao.cc/news_show_150127.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?