// the inline assembler code makes type blur,
// so we disable warnings for a while.
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#pragma GCC diagnostic ignored "-Wold-style-cast"
inline uint64_t hostToNetwork64(uint64_t host64)
{
return htobe64(host64);
}
inline uint32_t hostToNetwork32(uint32_t host32)
{
return htobe32(host32);
}
inline uint16_t hostToNetwork16(uint16_t host16)
{
return htobe16(host16);
}
inline uint64_t networkToHost64(uint64_t net64)
{
return be64toh(net64);
}
inline uint32_t networkToHost32(uint32_t net32)
{
return be32toh(net32);
}
inline uint16_t networkToHost16(uint16_t net16)
{
return be16toh(net16);
}
#pragma GCC diagnostic pop
这个头文件实现了转大小端的功能,作者没有使用ntoh和hton系列函数,应该是hton和ntoh系列的函数不支持64位的转换。这几个函数都很简单,例如htobe64就是64位的主机序转大端,be64toh就是64位的大端转主机序。
在 该头文件中,使用了#pragma GCC diagnostic ignored "-Wconversion"和#pragma GCC diagnostic ignored "-Wold-style-cast",禁用了-Wold-style-cast检测,根据代码注释是因为内联汇编程序代码使类型模糊。我自己测试,如果不禁用-Wold-style-cast的检测,htobe16和be16toh会报“使用旧式的类型转换”的告警(在编译时加上-Wold-style-cast)。