欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > c/c++ >内容正文

c/c++

快手,字节面试题,将IP地址转换成整数类型,再转换回来。C++代码

发布时间:2025/5/22 c/c++ 61 豆豆
生活随笔 收集整理的这篇文章主要介绍了 快手,字节面试题,将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++代码的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。