gpt4 book ai didi

c - 字节交换结构

转载 作者:太空宇宙 更新时间:2023-11-04 05:31:35 24 4
gpt4 key购买 nike

好吧,我不想问这个问题......但现在开始了。我正在 x86 机器上用 C 编写一些代码。我想通过网络发送一个结构,并且我想将该结构转换为网络字节顺序......我了解所有关于打包和 gcc 打包编译指示的戏剧......我想知道的是我如何转换结构(或数组或任何此类任意内存块)到网络字节顺序。

是否有我可以使用的标准 (Unix/Linux/Posix) 函数调用,或者我必须自己滚动。

x

最佳答案

原则上,您可以遍历结构并在每个 uint32_tuint16_t 上调用 htonlhtons字段,分别将结果分配回或分配给结构的副本。但是,我不推荐这种方法。它非常脆弱,容易出现结构对齐问题等。

除非传输和接收数据对性能极为关键,否则我会简单地为您的结构实现适当的序列化和反序列化方法。您可以以二进制格式一次写入一个字节的数值,选择是先写入最低有效部分还是最高有效部分。但实际上,我建议选择一种现代的基于文本的序列化格式,例如 json 或(呃,我讨厌这样说)xml。序列化和反序列化文本的成本非常小,在调试易用性和可扩展性方面的优势显着。

最后,如果你想使用文本,但觉得 json 或 xml 太令人反感、太重或学习曲线太长,你总是可以只使用 printfscanf 格式化以按固定顺序将结构读写为文本。以十六进制而不是十进制写入所有数值(包括 float )可能会稍微提高性能并确保浮点值的往返精度。如果您没有 C99, float 的另一种选择可能是将它们分解为尾数/指数形式,然后使用 frexpldexp 重新组合它们。

关于c - 字节交换结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3877928/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com