题解 | #整数与IP地址间的转换#
整数与IP地址间的转换
https://www.nowcoder.com/practice/66ca0e28f90c42a196afd78cc9c496ea
#include <cstdlib> #include <iostream> using namespace std; long ip2long(const string& ip) { const char* s = ip.c_str(); char* endptr = nullptr; long value = 0; for (int i = 0; i < 4; ++i) { auto v = strtol(s, &endptr, 10); s = endptr + 1; value = (value << 8) + v; } return value; } string long2ip(const long value) { int c1 = value >> 24; int c2 = (value >> 16) & 0xFF; int c3 = (value >> 8) & 0xFF; int c4 = value & 0xFF; char ip[16] = {'\0'}; snprintf(ip, sizeof(ip), "%d.%d.%d.%d", c1, c2, c3, c4); return string{ip}; } int main() { string ip; long value; while (cin >> ip >> value) { cout << ip2long(ip) << endl; cout << long2ip(value) << endl; } } // 64 位输出请用 printf("%lld")