gpt4 book ai didi

c - 具有 htonl 和 ntohl 功能的 pdp endian

转载 作者:太空宇宙 更新时间:2023-11-04 03:16:05 25 4
gpt4 key购买 nike

我已经阅读了 here那个,

On a hypothetical "stupid-endian" C implementation where the bytes are neither big-endian (ordered 4321) nor little-endian (ordered 1234), but ordered for example 3214, you would still have htonl(ntohl(x)), but htonl and ntohl would not do the same thing, they'd be 8-bit rotations in opposite directions. I hope that no such architecture exists, but it could implement the sockets API thanks to the fact that htonl and ntohl are separate functions.

但我无法理解和理解 but htonl 的含义和 ntohl不会做同样的事情,它们会在相反的方向旋转 8 位。 如果它们以相反的方式旋转会发生什么。函数的逻辑行为如何?

你能描述和解释它的逻辑吗?

附言这意味着在这种情况下 htonl 的实现和 ntohl功能不同 htonl(x) != ntohl(x)

最佳答案

假设您的架构在内部将值 0x01020304 存储为 0x04010203ntohl 的实现需要将字节右移 1。

例如:

uint32_t ntohl(uint32_t n)
{
unsigned char x = n & 0xff;
uint32_t result = n >> 8;
result |= x << 24;
}

这会将值 0x01020304 转换为 0x04010203。对结果 0x04010203 调用 ntohl 不会返回 0x01020304,而是返回 0x03040102

要反转该过程,您需要将向左 旋转 1 个字节。 htonl 的实现可能如下所示:

uint32_t htonl(uint32_t n)
{
unsigned char x = (n & 0xff000000) >> 24;
uint32_t result = n << 8;
result |= x;
}

关于c - 具有 htonl 和 ntohl 功能的 pdp endian,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51699182/

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