c - 套接字中的网络字节顺序

标签 c sockets integer send

我正在学习 c (Linux) 中的套接字编程,但我真的不明白为什么在发送整数时必须使用 htonl,而在发送字符串 (char*) 时却不需要。我已经阅读了很多论文,但我仍然不知道为什么。

最佳答案

这是因为通过网络发送的数据是按照Big Endian顺序发送的。不同的平台以不同的顺序存储数据。

假设您有一个 0x9FD3 的short。在 Small Endian 平台上,它将作为 0xD39F 存储在内存中。第一个字节是 0xD3,下一个字节是 0x9F。如果您将它发送到默认使用 Big Endian 的机器,它将被解释为 0xD39F (54,1475),而不是 0x9FD3 (40,915)。另一方面,字符串保存为字符数组,这是为了开始。如果您有“aString”,它将在内存中存储为“a”、“S”、“t”、“r”...,因为 1 个字符是 1 个字节宽。只有多字节的数据类型在小端平台上会倒序存储,转换毫无意义

关于c - 套接字中的网络字节顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28253786/

相关文章:

android - 最新android不再发送UDP广播包

java - ArrayList <Integer> 与 get/remove 方法

c++ - 定义一个 C 数组,其中每个元素都是相同的内存位置

c - iPXE 如何在不调用函数名称的情况下执行函数

C - 在阅读之前找到文件结尾

Java 将麦克风录制到字节数组并播放声音

c - union 的内存分配

java - 如何结束处理套接字连接的线程?

java - 对对象数组列表中的整数进行排序

c - 将两个 64 位整数乘以 128 位然后 >> 乘以 64 位的最快方法?