我已经包含了这些头文件,即使如此,我仍收到此错误
#include <sys/types.h>
#include <netinet/in.h>
#include <inttypes.h>
error: implicit declaration of function ‘ntohll’ [-Werror=implicit-function-declaration]
uint64_t bits = ntohll(*(uint64_t *)tmp);
最佳答案
ntohll
不是标准功能AFAICT。它存在于现代Solaris UNIX(如您的评论中的链接所述)和Windows provides it(来自WinSock2.h标头)中,但它不是任何通用标准(例如POSIX)的一部分,并且在很多(大多数/全部)中均未找到?)“类UNIX”系统,例如Linux和BSD。
许多缺少它的系统确实提供了be64toh
而不是具有相同的含义(尽管它来自的标头并不一致,甚至在BSD社区内也有所不同);他们只是说“ be”表示大端优先,而64表示位明确,而不是“ network”的“ n”,后者假定所有网络协议都是大端优先(Windows协议通常不是,不是ll
),而则不太清楚地表明它适用于64位值。
如果您需要可移植的代码,请使用you'll need to do a bunch of OS detection确定要包含的头,并根据您的OS实际提供的功能,使用宏(或内联函数等)为该功能提供通用名称。
关于c - 即使包含头文件,ntohll也会收到“函数的隐式声明”错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49163198/