Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 大端和小端机器的结构填充_C_Endianness - Fatal编程技术网

C 大端和小端机器的结构填充

C 大端和小端机器的结构填充,c,endianness,C,Endianness,我正在经历编译器负责对齐的过程,如下面的链接所述 我将我的问题概括为我们必须以编程方式对齐的场景以及编译器将为我们这样做的场景 如果两台机器具有不同的endian类型,即一台m/c是big-endian,另一台是little-endian,则填充是否需要?填充是否需要通过TCP/IP协议进行通信 请澄清我的问题 谢谢 TCP/IP将网络字节顺序定义为Big-Endian。采用小端结构的计算机在传输数据和接收数据之前,必须将TCP/IP报头信息中的字节重新排序为大端格式 TCP/IP套件中的所有

我正在经历编译器负责对齐的过程,如下面的链接所述

我将我的问题概括为我们必须以编程方式对齐的场景以及编译器将为我们这样做的场景

如果两台机器具有不同的endian类型,即一台m/c是big-endian,另一台是little-endian,则填充是否需要?填充是否需要通过TCP/IP协议进行通信

请澄清我的问题


谢谢

TCP/IP将网络字节顺序定义为Big-Endian。采用小端结构的计算机在传输数据和接收数据之前,必须将TCP/IP报头信息中的字节重新排序为大端格式

TCP/IP套件中的所有协议层都定义为big-endian


填充/对齐不受endianness的影响。

通过
write()
(或任何函数)发送原始结构时,只需担心填充和对齐。如果您真正想发送结构,请查阅编译器文档,了解如何强制编译器关闭填充,并在1字节边界上对齐。不过,只能在网络层中执行此操作,因为您实际上是在为您编译的体系结构关闭数据优化。如果在特定于应用程序的算法(大量读写)中使用结构,则如果您篡改对齐和填充设置,将失去性能


此外,您还必须确保结构的所有字段都符合双方商定的endian顺序。填充和对齐不影响尾数。

TCP/IP仅定义协议本身范围内参数的字节顺序。有效载荷可以是两个端点同意的任何顺序(最好)。