快手,字节面试题,将IP地址转换成整数类型,再转换回来。C++代码
生活随笔
收集整理的这篇文章主要介绍了
快手,字节面试题,将IP地址转换成整数类型,再转换回来。C++代码
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
题目描述
原理:ip地址的每段可以看成是一个0-255的整数,把每段拆分成一个二进制形式组合起来,然后把这个二进制数转变成
一个长整数。
举例:一个ip地址为10.0.3.193
每段数字 相对应的二进制数
10 00001010
0 00000000
3 00000011
193 11000001
组合起来即为:00001010 00000000 00000011 11000001,转换为10进制数就是:167773121,即该IP地址转换后的数字就是它了。
的每段可以看成是一个0-255的整数,需要对IP地址进行校验
输入描述:
输入
1 输入IP地址
2 输入10进制型的IP地址
输出描述:
输出
1 输出转换成10进制的IP地址
2 输出转换后的IP地址
示例1
输入
10.0.3.193
167969729
输出
167773121
10.3.3.193
代码:
//整数与IP地址间的转换 #include<iostream> #include<string> #include<vector> using namespace std; void TransferIp(string s) {int length = s.size();int num = 0;vector<int> nums;for (int i = 0; i < length; ++i){char item = s[i];if (item == '.'){if (num > 255)return ;else{nums.push_back(num);num = 0;}}else if (item >= '0' && item <= '9')num = num * 10 + item - '0';elsereturn ;}if (num > 255)return;else{nums.push_back(num);num = 0;}long val = 0;if (nums.size() == 4){long long val1 = nums[0] << 24;long long val2 = nums[1] << 16;long long val3 = nums[2] << 8;val += val1 + val2 + val3 + nums[3];}cout << val << endl;return; }void TransferToIp(long src) { //iNum[0]其实装的是最后一个数,先右移8位,再左移8位,相当于把后8位置0,在拿原来的数减,就会得到最后一位地址,以此类推int iNum[4];long sT = src >> 8;for (int i = 0; i < 4; i++){iNum[i] = src - (sT << 8);src = sT;sT = sT >> 8;}string sOut;for (int i = 3; i > 0 ; i--){string temp = to_string(iNum[i]);sOut += temp + '.';}sOut += to_string(iNum[0]);cout << sOut << endl; } int main() {string inStr="10.3.3.193";long sNum=167969729;TransferIp(inStr);TransferToIp(sNum);return 0; }总结
以上是生活随笔为你收集整理的快手,字节面试题,将IP地址转换成整数类型,再转换回来。C++代码的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: C C++中关于全局变量静态变量,ext
- 下一篇: C++ 输入字符串和string 类型总