快手,字节面试题,将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
- 下一篇: 在python中使用Ansible实现D