题解 | #整数与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")