1.网络字节序转为主机字节序
//网络字节序转为主机字节序
uint64_t utils::Ntohll(uint64_t val)
{
if (__BYTE_ORDER == __LITTLE_ENDIAN) {
return (((uint64_t)ntohl((int32_t)((val << 32) >> 32))) << 32)
| (uint32_t)ntohl((int32_t)(val >> 32));
} else if (__BYTE_ORDER == __BIG_ENDIAN) {
return val;
}
}
2.主机字节序转为网络字节序
//主机字节序转为网络字节序
uint64_t utils::Htonll(uint64_t val)
{
if (__BYTE_ORDER == __LITTLE_ENDIAN) {
return (((uint64_t)htonl((int32_t)((val << 32) >> 32))) << 32)
| (uint32_t)htonl((int32_t)(val >> 32));
} else if (__BYTE_ORDER == __BIG_ENDIAN) {
return val;
}
}
3.另外加一个函数:根据补码转为负数:
//根据补码转为负数
int64_t utils::ComplementToForm(int64_t value, uint32_t bit_num)
{
uint32_t count = 0;
int64_t ret = 0;
if (bit_num == 0) {
return value;
}
if (((value >> (bit_num - 1)) & 1) == 1) {
while (count <= (bit_num - 1)) {
ret |= (((value >> count) & 1) ^ 1) << count;
count++;
}
ret += 1;
return -ret;
} else {
TRACE_WITH_DETAIL("this is a positive number\n ");
}
return value;
}