百納の筆記試験問題はip文字列を32ビットのバイナリ数に変換します
#include <iostream>
#include <string>
using namespace std;
int ip[32]={0};// 0, -3895567 。
int * intToA(int a){ // 。
int *p =new int [8]; // , new 。C++ , 。
for(int j=0;j<8;j++){
p[j]=0;
}
int k=7;
while((a>>1)>0&&k>=0){//a>>1 a/2。
//p[k--]=a%2;// 。
if ((a&1)==0) { //a&1 () 。
p[k]=0;
}else{
p[k]=1;
}
a=a>>1;// a/=2;
k--;
}
if ((a&1)==0) { //p[k]=a%2; 。 。
p[k]=0;
}else{
p[k]=1;
}
return p;
}
int power(int n,int m){ //
if (n==0) {
return -1;
}
if (m==0) {
return 1;
}
int result=1;
for(int i=0;i<m;i++){
result*=n;
}
return result;
}
string * ipSplit(string str){ //ip split 。
string *str1=new string [4];
int j=0;
string temp="";
for(int i=0;i<str.length();i++){
if (str[i]=='.') {
str1[j]=temp;
j++;
temp="";
}else{
temp+=str[i];
}
}
str1[j]=temp;// 。
return str1;
}
int main(int argc, char* argv[])
{
string ipstr="192.168.0.1";
string *strs =ipSplit(ipstr);
int * ints =new int [4];
int intLen=4;
for(int i=0;i<intLen;i++){
ints[i]=0;
char *p=&strs[i][0];// char string 。 char string strs[i] , strs[i][0];
int k=0;
int strsLen=strs[i].length();
for(int j=strsLen-1;j>=0;j--){
ints[i]+=(char((*p)-'0')*power(10,strsLen-1-k));//char int char((*p)-'0');
k++;
p++;
}
}
int *p;
for(int j=0;j<4;j++){//4 8 32 。
p=intToA(ints[j]);
for(int n=0;n<8;n++){
ip[j*8+n]=p[n];
}
}
cout<<"
ip[k]:"<<endl;
for(int k=0;k<32;k++){
if (k!=0&&k%8==0) {
cout<<" ";
}
cout<<ip[k]<<" ";
}
cout<<endl;
return 0;
}
心得:1.その中のいくつかの効率的な書き方は注意に値する.2.charはstringタイプをどのように指しますか.3.stringタイプにはlength関数がありますが、char[]文字配列にはstrlen(const char[]がありません)はchar[]のみでパラメータとして使用でき、stringはstrlen()パラメータとして使用できません.4.c++には配列がなく関数がありません.できない()の.5.英語でgoogleで質問の答えを多く検索します.