当前位置: 首页 > news >正文

4.10、字节序列转换函数

4.10、字节序列转换函数

  • 1.字节序转换函数
  • 2.字节序转换函数有哪些
  • 3.字节序转换函数的使用

1.字节序转换函数

  • 当格式化的数据在两台使用不同字节序的主机之间直接传递时,接收端必然错误的解释之。解决问题的方法是:发送端总是把要发送的数据转换成大端字节序数据后再发送,而接收端知道对方传送过来的数据总是采用大端字节序,所以接收端可以根据自身采用的字节序决定是否对接收到的数据进行转换(小端机转换,大端机不转换)。
  • 网络字节顺序是 TCP/IP 中规定好的一种数据表示格式,它与具体的 CPU 类型、操作系统等无关,从而可以保证数据在不同主机之间传输时能够被正确解释,网络字节顺序采用大端排序方式。
  • BSD Socket提供了封装好的转换接口,方便程序员使用。包括从主机字节序到网络字节序的转换函数:htonshtonl;从网络字节序到主机字节序的转换函数:ntohsntohl

2.字节序转换函数有哪些

h - host 主机,主机字节序
to - 转换成什么
n - network 网络字节序
s - short unsigned short
l - long unsigned int#include <arpa/inet.h>
// 转换端口
uint16_t htons(uint16_t hostshort); // 主机字节序 - 网络字节序
uint16_t ntohs(uint16_t netshort); // 网络字节序 - 主机字节序
// 转IP
uint32_t htonl(uint32_t hostlong); // 主机字节序 - 网络字节序
uint32_t ntohl(uint32_t netlong); // 网络字节序 - 主机字节序

3.字节序转换函数的使用

#include <iostream>
#include <arpa/inet.h>using namespace std;int main()
{// 创建一个两个字节的数据unsigned short a = 0x0102;// 转换一下将每个字节分开unsigned char * stra = (unsigned char *)&a;printf("%d %d\n", stra[0], stra[1]);// 将数据转换为大端存储方式(电脑为大端不需要改变)uint16_t aa = htons(a);// 将转换之后的结果字节分开stra = (unsigned char *)&aa;printf("%d %d\n", stra[0], stra[1]);cout << "--------------------------------------" << endl;// 创建一个ip形式的数据unsigned char* strb = new unsigned char [4]{192, 168, 1, 25};unsigned int b = *(unsigned int * )strb;printf("%x\n", b);printf("%d %d %d %d\n", strb[0], strb[1], strb[2], strb[3]);unsigned int bb = ntohl(b);printf("%x\n", bb);strb = (unsigned char * )&bb;printf("%d %d %d %d\n", strb[0], strb[1], strb[2], strb[3]);return 0;
}
http://www.lryc.cn/news/60795.html

相关文章:

  • 研究LLMs之前,不如先读读这五篇论文!
  • 认识BASH这个Shell
  • 用SQL语句操作Oracle数据库——数据更新
  • 二维码+互联网云技术在中建二局施工项目管理中的应用实践
  • 扩散模型原理记录
  • Metasploit高级技术【第九章】
  • RK3568平台开发系列讲解(调试篇)IS_ERR函数的使用
  • TouchGFX界面开发 | TouchGFX软件安装
  • 使用 IDEA 远程 Debug 调试
  • 红黑树和平衡二叉树的优缺点及应用场景
  • 软文推广:真实有效提升软文排名与收录的三大方法!
  • SElinux的介绍及配置
  • vscode-python环境配置
  • 问卷调查样本量的确定方法
  • ios客户端学习笔记(三):学习Swift的设计模式
  • 406. 根据身高重建队列
  • ESP32使用ESP-NOW协议实现一对多通信和MAC地址存储
  • Qt 学生信息数据库管理
  • 相量的加减乘除计算
  • JavaScript 代码整洁之道
  • socket 及 字节序转换(嵌入式学习)
  • Java之~ Aop自定义注解日志
  • 编译原理个人作业--第四章
  • 学习笔记:数据库简介
  • day18_集合
  • Go面试必会基础题
  • 发送封包协议实现XXZ批量秒分解装备
  • Spring学习——Nginx
  • 记录 vue-cli 安装过程
  • 含氢微网优化调度模型matlab