没有itoa / to_string / boost的unsigned int到IP地址字符串

时间:2017-03-23 02:48:34

标签: c++ c

寻找一种非常快速有效的方法,将无符号32位int转换为IP地址std :: string,而不使用itoa或to_string或boost。我们当前的版本不支持其中任何一个。这也将在我们的系统上运行多次,因此它必须很快。

例如,无符号32位int的每个8位段将被转换为其中一个八位位组,直到int的所有32位都被转换。正在考虑打印...有更好的方法吗?

16909060 - > 0x01020304 - > 00000001000000100000001100000100 - > 1.2.3.4

2 个答案:

答案 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