我从here得知,
但是我无法理解和理解htonl
和ntohl
的含义,它们将做相反的事情,它们将是沿相反方向的8位旋转。如果它们以相反的方式旋转,将会发生什么。函数的逻辑行为如何?
您能描述和解释其逻辑吗?
P.S.这意味着在这种情况下,htonl
和ntohl
函数的实现是不同的,并且 htonl(x) != ntohl(x)
最佳答案
假设您有一个体系结构,内部将0x01020304
值存储为0x04010203
。 ntohl
的实现需要将字节右移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/