当前位置:  开发笔记 > 编程语言 > 正文

little-endian系统将数据转换为网络顺序的转换是什么?

如何解决《little-endian系统将数据转换为网络顺序的转换是什么?》经验,为你挑选了1个好方法。

将little-endian系统中的数据转换为网络字节顺序所需的基础转换是什么?对于2字节和4字节数据,有众所周知的函数(如htons,ntohl等)来封装更改,1字节数据字符串(如果有的话)会发生什么?

此外,维基百科暗示little-endian是big-endian的镜像,但如果这是真的,为什么我们需要对2字节和4字节数据进行特定处理?

文章"关于圣战和和平辩护"似乎意味着有许多不同口味的小端 - 这是一篇古老的文章 - 它仍然适用吗?是否仍然需要像Java类文件开头那样的字节顺序标记?

最后,网络字节顺序需要4字节对齐吗?



1> Doug Currie..:

假设你在b字节数组中有ASCII文本"BigE" .

b[0] == 'B'
b[1] == 'i'
b[2] == 'g'
b[3] == 'E'

这也是字符串的网络顺序.

如果它被视为32位整数,那就是

'B' + ('i' << 8) + ('g' << 16) + ('E' << 24) 

在一个小端平台和

'E' + ('g' << 8) + ('i' << 16) + ('B' << 24) 

在一个大端平台上.

如果你单独转换每个16位工作,你就不会得到这些工作

'i' + ('B' << 8) + ('E' << 16) + ('g' << 24) 

这就是为什么ntohl并且ntohs都是必需的.

换句话说,ntohs交换16位短的字节,并ntohl反转其32位字的四个字节的顺序.

推荐阅读
U友50081205_653
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有