Linux---主机字节序与网络字节序
现在的CPU累加器一次能够装载至少4个字节的一个整数,那么字节在内存中的排列顺序不同,导致累加器使用的结果不同,这就是字节序问题 。
例如:
我们存储一个int类型的数字;int a = 1;
主机字节序分为两种:
- 大端字节序
整数的高位字节存放在内存的低地址位。
- 小端字节序
整数的低位字节存放在内存地址的低地址为。
测试主机为大端还是小端
#include<stdio.h>void Test()
{union myunion{short a;char b[2];}test;test.a = 0x0102;if(b[0] == 1 && b[1] == 2)printf("大端\n");else if(b[0] == 2 && b[1] == 1)printf("小端\n");elseprintf("未知\n");
}
由于不同主机之间的字节序存储方式不同,这就导致,如果发送方与接收方主机字节序存储方式不同,所以在通信时,需要先将主机字节序进行统一,这就是主机字节序装换为网络字节序。
#include<netinet/in.h>
//长整型主机字节序转换为网络字节序
unsigned long int htonl(unsigned long int hostlong);//短整型主机字节序转换为网络字节序
unsigned short int htons(unsigned short int hostshort);//长整形网络字节序装换为主机字节序
unsigned long int ntohl(unsigned long int hostlong);//短整形网络字节序装换为主机字节序
unsigned short int ntohs(unsigned short int hostshort);
注意:长整型通常是用于转换IP地址,短整型主要转换端口号。
Linux---主机字节序与网络字节序相关推荐
- linux网络编程一:主机字节序与网络字节序的的判断
linux网络编程一:主机字节序与网络字节序的的判断(1)现代CPU的累加器一次能装载至少4字节(32位),即一个整数.那么这4字节在内存中排列的顺序将影响它被累加器装载成的整数值,这就是字节序问题 ...
- 【Linux】主机字节序和网络字节序
(一)问题提出:为什么要有主机字节序和网络字节序的存在? 现在大多数PC机器都是小端字节序(小端存储),也称为主机字节序:但不排除有大端PC机器的存在. 若在两台字节序不同的主机上传输数据时,接收端将 ...
- 主机字节序与网络字节序的转换函数:htonl、ntohl、htons、ntohs
Part 1: htons函数具体解释 在Linux和Windows网络编程时需要用到htons和htonl函数,用来将主机字节顺序转换为网络字节顺序. 在Intel机器下,执行以下程序 i ...
- 主机字节序与网络字节序的转换函数:htonl、ntohl、htons、ntohs【转】
(转自:https://blog.csdn.net/kulala082/article/details/53431473) Part 1: htons函数具体解释 在Linux和Windows网络编程 ...
- Linux网络编程——字节序与网络字节序
说明: 本文章旨在总结备份.方便以后查询,由于是个人总结,如有不对,欢迎指正:另外,内容大部分来自网络.书籍.和各类手册,如若侵权请告知,马上删帖致歉. QQ 群 号:513683159 [相 ...
- linux大端小端命令,linux的大小端、网络字节序问题
linux的大小端.网络字节序问题 总结:1.80X86使用小端法,网络字节序使用大端法. 2.二进制的网络编程中,传送数据,最好以unsigned char, unsigned short, uns ...
- 字节序 主机字节序与网络字节序互相转换
目录 1.什么是字节序? 2.字节序分类 3.为什么要有大端字节序和小端字节序? 4.主机字节序和网络字节序 5.主机字节序与网络字节序的转换 6.怎么判断自己的主机是小端字节序还是大端字节序呢? 7 ...
- 主机字节序和网络字节序
1.大端字节序和小端字节序: 大端字节序存储时值的高位存储在较小的地址,值的低位存储在较大的地址. 小端字节序存储时值的高位存储在较大的地址,值的低位存储在较小的地址. 以0x12345678为例: ...
- 本地字节序和网络字节序
本地字节序和网络字节序 字节序指不同的CPU访问内存中多字节数据的时候,存在大小端的问题,并且一定是访问多字节数据的时候才会存在大小端的问题,如果CPU访问的是字符串,则不存在大小端的问题: 那么如何 ...
- 本地字节序与网络字节序的相互转换(IP地址、端口号)
一般数据在内存中是按照字节存储的,存储的方式分为大端和小端.在不知道对方主机的存储方式的情况下,我们不知道是否需要转换数据的存储方式.因此,TCP/IP协议规定:发送到网络的数据流应采用大端字节序! ...
最新文章
- C# 字段 属性 方法 三霸主齐上阵
- java条件配置,三、使用JAVA必备条件—环境配置
- Python 为什么不支持 i++ 自增语法,不提供 ++ 操作符
- 深入理解this机制系列第三篇——箭头函数
- 转盘脚本编辑器学习1
- lnmp解析php,LNMP之 php解析
- 案例展示自定义C函数的实现过程
- 时间序列分析工具箱——sweep
- Ubuntu 定时锁屏3.0
- linux下c语言编程实例
- mac使用svn命令基础篇
- Python求绝对值的三种方法
- 适合于图像处理方向的SCI期刊杂志列表【部分转载】
- 图片分享和加载失败的原因之一
- 在C语言中怎样定义一个字符串并输入输出
- solr8.3集群配置
- 【原创】关于联想Y400适配器和电池同时使用无法开机的问题
- 搭建Windows 家庭用无线局域网WLAN (Wireless Local Area Network)
- CSDN日报20170712——《AI 大行其道,你准备好了吗?》
- 打造自己的linux桌面,亲手打造自己的Linux桌面环境
热门文章
- 快速实现MySQL迁移到Redis
- 纳德拉:微软正计划“终极移动设备”
- onInterceptTouchEvent / onTouchEvent响应事件的详析
- Lync Server多SIP域环境和简单URL地址部署
- VMware下ubuntu全屏显示
- 第6章 循环、批量传送和条件转移-1.34h
- 2020 RocketMQ安装
- phtml php,PHTML Encoder
- https://akaedu.github.io/book/ch32s02.html
- 怎么测试本地网页在不同分辨率下电脑显示效果_4K商用超值利器 飞利浦272P7VPTKEB显示器评测...