gpt4 book ai didi

language-agnostic - little-endian 系统使用哪些转换将数据转换为网络顺序?

转载 作者:行者123 更新时间:2023-12-04 09:02:50 24 4
gpt4 key购买 nike

将小端系统中的数据转换为网络字节顺序所需的底层转换是什么?对于2字节和4字节数据,有众所周知的函数(如htons,ntohl等)来封装变化,1字节数据的字符串(如果有的话)会发生什么?

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

文章“论圣战和和平恳求”似乎暗示小端有许多不同的风格——这是一篇旧文章——这仍然适用吗?是否仍然需要像在 Java 类文件开头找到的那些字节顺序标记?

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

最佳答案

假设您在数组 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) 

这就是为什么 ntohlntohs两者都是必需的。

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

关于language-agnostic - little-endian 系统使用哪些转换将数据转换为网络顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/463416/

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