【发布时间】:2019-12-10 21:06:31
【问题描述】:
有没有像我在论坛上找到的这样的 htonll,ntohll,ntohl,htonl 的书面函数:
uint32_t ntohl(uint32_t const net) {
uint8_t data[4] = {};
memcpy(&data, &net, sizeof(data));
return ((uint32_t) data[3] << 0)
| ((uint32_t) data[2] << 8)
| ((uint32_t) data[1] << 16)
| ((uint32_t) data[0] << 24);
}
或者你能告诉我每一个的数据转移方案,然后像上面这个一样写吗?
编辑:
这些正确吗:
uint32_t htonl(uint32_t const net) {
uint8_t data[4] = {};
memcpy(&data, &net, sizeof(data));
return ((uint32_t) data[0] << 0)
| ((uint32_t) data[1] << 8)
| ((uint32_t) data[2] << 16)
| ((uint32_t) data[3] << 24);
}
uint64_t htonll(uint64_t const net) {
uint8_t data[4] = {};
memcpy(&data, &net, sizeof(data));
return ((uint64_t) data[0] << 0)
| ((uint64_t) data[1] << 8)
| ((uint64_t) data[2] << 16)
| ((uint64_t) data[3] << 24);
}
uint64_t ntohll(uint64_t const net) {
uint8_t data[4] = {};
memcpy(&data, &net, sizeof(data));
return ((uint64_t) data[3] << 0)
| ((uint64_t) data[2] << 8)
| ((uint64_t) data[1] << 16)
| ((uint64_t) data[0] << 24);
}
【问题讨论】: