【发布时间】:2017-12-09 16:23:06
【问题描述】:
作为嵌入式软件工程师,我是一家公司的新手,我必须处理很多网络问题。我必须一直用 C++ 编程,并使用我同事的代码,我注意到他们使用结构来构建数据包以使用 TCP/UDP 通过网络发送。为此,因为我们使用的机器是小端的,所以一切都必须转换为大端。因此,在必须发送数据的那一刻,他们使用已知的函数,如 htons、ntohs 等。
所以我一直在研究如何使我的代码可移植,这样程序员就不必关心他的机器的字节顺序,我偶然发现了 Boost 库的 Endian Arithmetic 类型,程序员可以用它来决定您的整数类型如何存储在内存中。在我会使用它们的上下文中,它们看起来非常好,但几乎没有任何地方提到它们。 Stackoverflow 仅发布关于如何无法以正确方式处理字节顺序问题的帖子,但这些算术类型对我来说似乎是一个不错的可移植解决方案。为什么这些类型几乎没有在任何地方被提及,也从来没有被提议过?它们有什么问题还是它们太新了?
【问题讨论】:
-
我相信这主要是一个熟悉的问题,我当然认为 boost::endian 是一个经过深思熟虑的问题的答案。
-
@RustyX 是的,但是当您或使用您的代码的人忘记使用转换函数时,代码更容易出错。他/她甚至可能不知道,他/她将不得不考虑。 Endian Arithmetic 类型不需要大惊小怪。
-
htons明确说明了转换发生的位置,这是一件好事,因为您编写一次代码,然后您和其他人会阅读多次。因此,可以说拥有可读的代码比易于编写更重要。
标签: c++ boost endianness portability integer-arithmetic