Xof*_*ofo 0 c serialization struct
好吧,我不想问这个问题......但是这里有.我在x86机器上用C编写了一些代码.我想通过网络发送一个结构,并且我想将结构转换为网络字节顺序...我理解所有关于打包和gcc打包编译的戏剧......我想知道的是我如何转换网络字节顺序的结构(或数组或任何此类任意内存blob).
是否有我可以使用的标准(Unix/Linux/Posix)函数调用,或者我必须自己编写.
X
原则上,您可以分别通过结构和调用htonl或htons在每个uint32_t或uint16_t字段上,将结果返回或分配给结构的副本.但是,我不建议采用这种方法.它非常脆弱,受结构对齐问题等影响.
除非传输和接收数据对性能至关重要,否则我只需为您的结构实现正确的序列化和反序列化方法.您可以以二进制格式一次写出一个字节的数值,选择是否要先写入最不重要或最重要的部分.但实际上,我建议选择一种现代的基于文本的序列化格式,如json或(嗯,我讨厌这样说)xml.序列化和反序列化文本的成本非常小,并且在调试简易性和可扩展性方面的优势是显着的.
最后,如果你想使用文本但是发现json或xml太令人厌恶,太沉重或太过学习曲线,你总是可以使用printf和scanf格式化以固定顺序读取和写入结构作为文本.以十六进制而不是十进制写入所有数值(包括浮点数)可能会略微提高性能并确保浮点值的往返精度.如果你没有C99,浮点数的另一个选项可能是将它们分解为尾数/指数形式,并使用frexp和重新组合它们ldexp.