我发现以下代码能够将int64_t转换为网络字节顺序。现在,我需要相反的代码,以便将网络字节顺序转换回我的小端机器。代码是这样的。
int64_t decode(void* value){
int64_t vv = *((int64_t*) value);
int num = 42;
if(*(char *)&num == 42) //test big/little endian
return (((uint64)htonl(vv)) << 32) + htonl(vv >> 32);
else
return vv;
}
Run Code Online (Sandbox Code Playgroud)
非常感谢!
您的代码 htonll
#define htonll(x) ((((uint64_t)htonl(x)) << 32) + htonl((x) >> 32))
Run Code Online (Sandbox Code Playgroud)
将字节首尾翻转。如果您两次应用它,它将值恢复为原始状态。因此,相同的功能可用于ntohll。