题目:
将16843009和xxxxxxx(另外一个数)转换成对应的ipv4格式。如:
16843009对应ipv4的格式为 1.1.1.1
xxxxxxxx(忘记了)对应ipv4格式为 192.xxx.xxx.xxx
思路:
IPV4是根据二进制编码转换而成,所以需要先将整数转换成二进制格式,再转换成对应的IPV4
1.先将16843009转换成二进制格式 00000001 00000001 00000001 00000001
2.再将二进制转换成对应的字段,如:
00000001 00000001 00000001 00000001
| | | |
1 1 1 1
函数代码:
void intTransformIPV4(int num) {
stack s;
int i, d;
i = 0;
while(num != 0) {
d = num % 2;
num /= 2;
if (d != 0) {
s.push(i);
}
i++;
}
//第二步
int field4, field3, field2, field1;//对应ipv4的 field4.field3.fiedl2.field1
field4 = 0;
field3 = 0;
field2 = 0;
field1 = 0;
while (!s.empty()) {
if (24 <= s.top() && s.top() <= 31) {
field4 += pow(2, (s.top() % 8));
}
else if (16 <= s.top() && s.top() <= 23) {
field3 += pow(2, (s.top() % 8));
}
else if (8 <= s.top() && s.top() <= 15) {
field2 += pow(2, (s.top() % 8));
}
else {
field1 += pow(2, (s.top() % 8));
}
s.pop();
}
string ipv4 = "" + to_string(field4) + "." + to_string(field3) + "."
+ to_string(field2) + "." + to_string(field1);
cout << ipv4 << endl;
}
完整代码:
#include#include //栈 #include using namespace std; void intTransformIPV4(int num) { stack s; int i, d; i = 0; while(num != 0) { d = num % 2; num /= 2; if (d != 0) { s.push(i); } i++; } //第二步 int field4, field3, field2, field1;//对应ipv4的 field4.field3.fiedl2.field1 field4 = 0; field3 = 0; field2 = 0; field1 = 0; while (!s.empty()) { if (24 <= s.top() && s.top() <= 31) { field4 += pow(2, (s.top() % 8)); } else if (16 <= s.top() && s.top() <= 23) { field3 += pow(2, (s.top() % 8)); } else if (8 <= s.top() && s.top() <= 15) { field2 += pow(2, (s.top() % 8)); } else { field1 += pow(2, (s.top() % 8)); } s.pop(); } string ipv4 = "" + to_string(field4) + "." + to_string(field3) + "." + to_string(field2) + "." + to_string(field1); cout << ipv4 << endl; } int main() { int num = 16843009; intTransformIPV4(num); return 0; }
返回链接



