我从here得知,



但是我无法理解和理解htonlntohl的含义,它们将做相反的事情,它们将是沿相反方向的8位旋转。如果它们以相反的方式旋转,将会发生什么。函数的逻辑行为如何?

您能描述和解释其逻辑吗?

P.S.这意味着在这种情况下,htonlntohl函数的实现是不同的,并且 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。在结果ntohl上调用0x04010203不会返回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/

10-09 08:41