使用 Boost Endian 算术类型是否被认为是好的做法?

Is using the Boost Endian Arithmetic types considered good practice?

作为嵌入式软件工程师,我在一家公司还很新,我必须处理很多网络问题。我必须一直用 C++ 编程,并使用我同事的代码,我注意到他们使用结构来构建数据包,使用 TCP/UDP 通过网络发送。为此,因为我们使用的机器是小端,所以所有东西都必须转换为大端。因此,在必须发送数据的那一刻,他们使用 htons、ntohs 等已知函数

所以我在寻找如何使我的代码可移植,这样程序员就不必关心他的机器的字节顺序,我偶然发现了 Boost 库的字节序算术类型,程序员,可以决定你的整数类型在内存中的存储方式。在我使用它们的上下文中,它们看起来非常好,但几乎没有在任何地方提到它们。 Whosebug 上只有关于如何以正确的方式处理字节序问题的帖子,但这些算术类型对我来说似乎是一个很好的可移植解决方案。为什么这些类型在任何地方都几乎没有被提及,而且从来没有被提出解决方案?它们有什么问题还是它们太新了?

这取决于在哪里。当然,在整个代码库中使用它们是一种设计权衡。

字节序类型不是零成本抽象。将它们用于被动存储以外的任何其他用途都会损害性能。 (想象一下对非本地字节序数字进行数字运算。与实际计算相比,处理器可能会根据需要花费更多时间处理 high-order/low-order 字节和单词)。

如果您的应用程序是典型的,您将拥有不包含许多 "live" 数据元素的 POD 传输缓冲区,并且在引擎盖下自动字节序转换的绝对好处值得任何开销。

我知道 Boost Endian 类型并且更喜欢它们而不是在心跳中重复编写 ntoh 和朋友。

实际上,尽管我编写了通用的序列化助手(其中 ntoh/hton 的使用被隔离到少数原始函数),或者使用了现有的库(例如 protobuf) .所以具有讽刺意味的是,我也没有在任何生产代码中广泛使用 Boost Endian。

也许这种模式适用于许多开发人员,关于 Boost Endian 的解释不是很多?