首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >字节排序的高字节顺序和低字节顺序支持

字节排序的高字节顺序和低字节顺序支持
EN

Stack Overflow用户
提问于 2012-10-19 01:20:17
回答 3查看 1.8K关注 0票数 6

我们需要支持3个硬件平台- Windows (小端)和Linux Embedded (大端和小端)。我们的数据流依赖于它所使用的机器,并且需要将数据分解为位字段。

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

然而,我在我的可视化C++包含中找不到它。

是否有两个平台(Windows和Linux)的通用内置?

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

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-19 01:23:38

在这两个平台上都有

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

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

缺少的用于long long (64位)的htonll()ntohll()可以很容易地从这两者中构建出来。参见this implementation for example

更新-0:

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

下面是构建*ll函数的另一种故障保护方法:https://stackoverflow.com/a/955980/694576

更新-0.1:

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

更新-1:

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

票数 13
EN

Stack Overflow用户

发布于 2012-10-19 01:23:54

不是相同的名称,但相同的功能可以使用exist

编辑:存档链接-> https://web.archive.org/web/20151207075029/http://msdn.microsoft.com/en-us/library/a3140177(v=vs.80).aspx

_byteswap_uint64、_byteswap_ulong、_byteswap_ushort

票数 2
EN

Stack Overflow用户

发布于 2012-10-19 05:24:21

如果您坚持处理字节性别,htons和htonl (以及类似的宏)是很好的。

但是,最好是通过以ASCII或类似格式输出数据来回避这个问题。它占用了更多的空间,在网络上传输的速度也慢了一点,但它的简单性和未来性是值得的。

另一种选择是用数字将int和short分开,这样& 0xff就会被256重复除。这在所有架构上都提供了单一的格式。但ASCII仍然具有优势,因为它更易于调试。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12960226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档