寻找一种非常快速有效的方法,将无符号32位int转换为IP地址std :: string,而不使用itoa或to_string或boost。我们当前的版本不支持其中任何一个。这也将在我们的系统上运行多次,因此它必须很快。
例如,无符号32位int的每个8位段将被转换为其中一个八位位组,直到int的所有32位都被转换。正在考虑打印...有更好的方法吗?
16909060 - > 0x01020304 - > 00000001000000100000001100000100 - > 1.2.3.4
答案 0 :(得分:0)
也许你想要:
char buf[16];
snprintf(buf, sizeof buf, "%u.%u.%u.%u",
(x / 0x1000000u) % 0x100,
(x / 0x10000u) % 0x100,
(x / 0x100u) % 0x100,
(x) % 0x100 );
答案 1 :(得分:0)
使用按位运算可以让您轻松检索每个八位字节。像这样的东西? (手头没有编译器)
uint32_t ip = ....;
ip & 0xFF; // last octet
(ip >> 8) & 0xFF; // 2nd last octet
(ip >> 16) & 0xFF; // 2nd octet
ip >> 24; // first octet