加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

c – Big Endian和Little Endian支持字节排序

发布时间:2020-12-13 19:12:09 所属栏目:Linux 来源:网络整理
导读:我们需要支持3个硬件平台Windows(小端)和Linux嵌入式(大端和小端).我们的数据流依赖于它使用的机器,数据需要分解为位字段. 我想写一个宏(如果可能的话)来抽象出细节.在Linux上,我可以使用bswap_16 / bswap_32 / bswap_64进行Little Endian转换. 但是,我在我

我们需要支持3个硬件平台–Windows(小端)和Linux嵌入式(大端和小端).我们的数据流依赖于它使用的机器,数据需要分解为位字段.

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

但是,我在我的Visual C包含中找不到这个.

两个平台(Windows和Linux)都有通用的内置功能吗?

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

谢谢.

最佳答案
在这两个平台上你都有

简而言之(16位):htons()和ntohs()

for long(32bit):htonl()和ntohl()

长期(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函数的功能.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读