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

C++学习笔记(50)

343、主机字节序与网络字节序
一、大端序/小端序
如果数据类型占用的内存空间大于 1 字节,CPU 把数据存放在内存中的方式有两种:
 大端序(Big Endian):低位字节存放在高位,高位字节存放在低位。
 小端序(Little Endia):低位字节存放在低位,高位字节存放在高位。
假设从内存地址 0x00000001 处开始存储十六进制数 0x12345678,那么:
Bit-endian(按原来顺序存储)
0x00000001 0x12
0x00000002 0x34
0x00000003 0x56
0x00000004 0x78
Little-endian(颠倒顺序储存)
0x00000001 0x78
0x00000002 0x56
0x00000003 0x34
0x00000004 0x12
Intel 系列的 CPU 以小端序方式保存数据,其它型号的 CPU 不一定。
操作文件的本质是把内存中的数据写入磁盘,在网络编程中,传输数据的本质也是把数据写入文件
(socket 也是文件描述符)。
这样的话,字节序不同的计算机之间传输数据,可能会出现问题。 二、网络字节序
为了解决不同字节序的计算机之间传输数据的问题,约定采用网络字节序(大端序)。
C 语言提供了四个库函数,用于在主机字节序和网络字节序之间转换:
uint16_t h to n s(uint16_t hostshort); // uint16_t 2 字节的整数 unsigned short
uint32_t htonl(uint32_t hostlong); // uint32_t 4 字节的整数 unsigned int
uint16_t ntohs(uint16_t netshort);
uint32_t n to h l(uint32_t netlong);
h host(主机);
to 转换;
n network(网络);
s short(2 字节,16 位的整数);
l long(4 字节,32 位的整数);


http://www.kler.cn/news/340762.html

相关文章:

  • [面试] java开发面经-1
  • 张雪峰谈人工智能技术应用专业的就业前景!
  • 多路复用——poll
  • 了解Java的基础
  • 单细胞转录组 —— STARsolo 原始数据处理
  • L0-Linux-关卡材料提交
  • 初始Linux(二)基础命令
  • 多路复用——select
  • 【CUDA】【PyTorch】安装 PyTorch 与 CUDA 11.7 的详细步骤
  • ECCV24高分论文:MVSplat稀疏视图下的高效的前馈三维重建模型
  • 每日OJ题_牛客_mari和shiny_线性dp_C++_Java
  • 前端提升方向
  • [Python] 函数入参中的 *args和**kwargs 是什么意思
  • 【C语言】指针
  • GO网络编程(三):海量用户通信系统1:登录功能初步
  • C语言-进程控制编程
  • Java 根据字符生成背景透明的图片
  • 栈的操作算法实现(数据结构)
  • yolov11人物背景扣除
  • 离线服务器上复现G3SR论文实验