gpt4 book ai didi

c++ - Big Endian 和 Little Endian 支持字节排序

转载 作者:IT王子 更新时间:2023-10-29 01:03:36 24 4
gpt4 key购买 nike

我们需要支持 3 种硬件平台 - Windows(小端)和 Linux Embedded(大端和小端)。我们的数据流取决于它使用的机器,数据需要分解成位域。

我想写一个宏(如果可能的话)来抽象掉细节。在 Linux 上,我可以使用 bswap_16/bswap_32/bswap_64 进行 Little Endian 转换。

但是,我在我的 Visual C++ 中找不到它。

是否有适用于两种平台(Windows 和 Linux)的通用内置软件?

如果没有,那么我可以在 Visual C++ 中使用什么来进行字节交换(除了自己编写 - 希望内置一些机器优化)?

谢谢。

最佳答案

在两个平台上都有

对于 short(16 位):htons()ntohs()

对于 long(32 位):htonl()ntohl()

long long(64 位)缺少的 htonll()ntohll() 可以很容易地从这两个构建。参见 this implementation for example .

更新-0:

对于上面链接的示例,Simon Richter 在评论中提到,它不一定必须有效。这样做的原因是:编译器可能会在所使用的 union 中的某处引入额外的字节。为了解决这个问题, union 需要打包。后者可能会导致性能损失。

所以这是构建 *ll 函数的另一种故障安全方法:https://stackoverflow.com/a/955980/694576

更新 0.1:

根据 bames53 的评论,我倾向于得出结论,上面链接的第一个示例不应与 C++ 一起使用,而只能与 C 一起使用。

更新-1:

在 Linux 上实现 *ll 函数的功能 this approach might be the ' best' .

关于c++ - Big Endian 和 Little Endian 支持字节排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12960226/

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