将IP字符串转化为一个32bit整数

1.use strtok()
char a[]="1.0.0.1";
char *p=NULL;
char *d=".";
p=strtok(a,d);
while(p){
cout<<p;
p=strtok(NULL,d);
}



2.shift by bit-computing位运算
//input a CONST IP String,return a 32-bit integer
#include "stdafx.h"
#include<iostream>
#include<string>
#include<algorithm>
#include<map>
using namespace std;

int ipstr2int(const char*ip){
int result = 0;
int tmp = 0;
int shift = 24;
const char*pEnd = ip;
const char*pStart = ip;

while(*pEnd!='\0'){
while(*pEnd!='.'&&*pEnd!='\0'){//find out the "." in IP String
pEnd++;
}
tmp=0;
while(pStart<pEnd){//calculate the value divided by '.'
tmp=tmp*10+(*pStart-'0');
pStart++;
}
//shift for 24.16.8.0 of each segment
result+=(tmp<<shift);
shift-=8;
if(*pEnd=='\0')
break;
pStart=pEnd+1;
pEnd++;
}
return result;
}

int main()
{

char*a="1.0.0.1";
cout<<"IP:"<<endl;
cout<<"int:"<<ipstr2int(a)<<endl;;


}
### 回答1: 以下是用C语言编写的将32位二进制IP地址转换为点分十进制的程序: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { unsigned int ip; char ip_str[17]; int i; int segments[4]; printf("Enter IP address in binary format (32 bits): "); scanf("%16s", ip_str); // Convert binary string to unsigned integer ip = (unsigned int) strtol(ip_str, NULL, 2); // Extract the four segments of the IP address for (i = 0; i < 4; i++) { segments[i] = (ip >> (24 - i*8)) & 0xFF; } // Print the IP address in dotted decimal format printf("IP address in dotted decimal format: %d.%d.%d.%d\n", segments[0], segments[1], segments[2], segments[3]); return 0; } ``` 该程序首先提示用户输入32位二进制IP地址,然后将其转换为无符号整数并将其分解为四个8位段。最后,程序打印出点分十进制格式的IP地址。 ### 回答2: ```c #include <stdio.h> void convertToDecimal(int ip) { int octet4 = ip & 0xFF; // Masking to get the last 8 bits int octet3 = (ip >> 8) & 0xFF; // Shift right by 8 bits and masking to get next 8 bits int octet2 = (ip >> 16) & 0xFF; // Shift right by 16 bits and masking to get next 8 bits int octet1 = (ip >> 24) & 0xFF; // Shift right by 24 bits and masking to get first 8 bits printf("%d.%d.%d.%d\n", octet1, octet2, octet3, octet4); } int main() { unsigned int ip = 0xACD3EFA9; // Example 32-bit binary IP address printf("32位2进制的IP地址为:"); for(int i = 31; i >= 0; i--) { if((i+1) % 8 == 0 && i != 31) { // Add a dot every 8 bits printf("."); } printf("%d", (ip >> i) & 1); } printf("\n"); printf("点分10进制的IP地址为:"); convertToDecimal(ip); return 0; } ``` 这个程序使用C语言将32位二进制IP地址转换为点分十进制。它首先打印出32位二进制IP地址,然后调用 `convertToDecimal` 函数将其转换为点分十进制形式。`convertToDecimal` 函数使用位操作和位掩码将32IP地址分割成4个八位数字,并打印出以点分隔的十进制形式。 示例输出: ``` 32位2进制的IP地址为:10101100110100111110111110101001 点分10进制的IP地址为:172.211.239.169 ``` ### 回答3: 以下是使用C语言编写的简单程序来将32位2进制的IP地址转换为点分十进制的示例: ```c #include <stdio.h> #include <string.h> char* convertToDecimal(char* binaryIP) { int decimalIP[4]; static char decimal[16]; for (int i = 0; i < 4; i++) { decimalIP[i] = 0; for (int j = 0; j < 8; j++) { decimalIP[i] += (binaryIP[i * 8 + j] - '0') << (7 - j); } } sprintf(decimal, "%d.%d.%d.%d", decimalIP[0], decimalIP[1], decimalIP[2], decimalIP[3]); return decimal; } int main() { char binaryIP[33]; printf("请输入一个32位的二进制IP地址:"); scanf("%s", binaryIP); if (strlen(binaryIP) != 32) { printf("无效的输入。\n"); return 1; } char* decimalIP = convertToDecimal(binaryIP); printf("转换后的IP地址为:%s\n", decimalIP); return 0; } ``` 该程序先通过`convertToDecimal()`函数将32位的二进制IP地址转换为点分十进制形式,然后在`main()`函数中进行输入和输出。输入的二进制IP地址必须是长度为32字符串,否则会提示无效的输入。转换后的IP地址将被打印到控制台上。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值