用字符串输入,每8个字符可以转换出一个10进制数
#include<stdio.h>
int str2ten(char *p)
{
int ten = 0;
for(int i=0;i<8;i++)
ten = ten * 2 + p[i] - '0';
return ten;
}
int main()
{
char s[33] = {0},*p = s;
int a[4] = {0};
gets(s);
a[0] = str2ten(p);
a[1] = str2ten(p+8);
a[2] = str2ten(p+16);
a[3] = str2ten(p+24);
printf("%d.%d.%d.%d\n",a[0],a[1],a[2],a[3]);
return 0;
}
代码实现和注释及运行结果如下,望采纳
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//将二进制字符串转换为十进制数并返回
int bin_to_dec(char *bin)
{
int dec = 0;
int len = strlen(bin);
int i;
for (i = 0; i < len; i++)
{
dec = dec * 2 + (bin[i] - '0');
}
return dec;
}
//将IP地址的二进制字符串转换为四段十进制形式
void convert_ip_address(char *bin_ip, int *dec_ip)
{
char segment[9]; //每段IP地址的二进制字符串长度为8
int i;
for (i = 0; i < 4; i++)
{
strncpy(segment, bin_ip + i * 8, 8);
segment[8] = '\0';
dec_ip[i] = bin_to_dec(segment);
}
}
//主函数
int main()
{
char bin_ip[] = "01111001000010100000101001110010";
int dec_ip[4];
convert_ip_address(bin_ip, dec_ip);
printf("%d.%d.%d.%d\n", dec_ip[0], dec_ip[1], dec_ip[2], dec_ip[3]);
return 0;
}
#include <stdio.h>
#include <math.h>
int main()
{
char ip[64];
int num[4] = {0};
char *p;
scanf("%s", ip);
p = ip;
for(int i=0; i<4; i++)
{
for(int j=0; j<8; j++)
{
if(*(p+j) == '1')
num[i] += pow(2, 7-j);
}
p += 8;
}
for(int i=0; i<4; i++) {
printf("%d", num[i]);
if(i != 3)
printf(".");
}
return 0;
}
如有帮助,望采纳
#include<stdio.h>
int str2ten(char *p)
{
int ten = 0;
for(int i=0;i<8;i++)
ten = ten * 2 + p[i] - '0';
return ten;
}
int main()
{
char s[33] = {0},*p = s;
int a[4] = {0};
gets(s);
a[0] = str2ten(p);
a[1] = str2ten(p+8);
a[2] = str2ten(p+16);
a[3] = str2ten(p+24);
printf("%d.%d.%d.%d\n",a[0],a[1],a[2],a[3]);
return 0;
}
我们可以通过以下步骤来实现这个功能:
将输入的二进制字符串拆分成四段,每段8位。
将每段二进制字符串转换为十进制整数。
将转换后的四个整数用"."连接起来,形成一个IP地址。
下面是一个使用C语言实现上述功能的示例代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
// 输入二进制字符串
char *bin_str = "01111001000010100000101001110010";
// 拆分成四段,每段8位
char *parts[4];
parts[0] = bin_str;
parts[1] = parts[0] + 8;
parts[2] = parts[1] + 8;
parts[3] = parts[2] + 8;
// 将每段二进制字符串转换为十进制整数
int decimals[4];
for (int i = 0; i < 4; i++)
{
decimals[i] = strtol(parts[i], NULL, 2);
}
// 将转换后的四个整数用"."连接起来,形成一个IP地址
printf("%d.%d.%d.%d\n", decimals[0], decimals[1], decimals[2], decimals[3]);
return 0;
}
#include <stdio.h>
#include <math.h>
int main()
{
char ip[64];
int num[4] = {0};
char *p;
scanf("%s", ip);
p = ip;
for(int i=0; i<4; i++)
{
for(int j=0; j<8; j++)
{
if(*(p+j) == '1')
num[i] += pow(2, 7-j);
}
p += 8;
}
for(int i=0; i<4; i++) {
printf("%d", num[i]);
if(i != 3)
printf(".");
}
return 0;
}
鄙人12岁
#include <iostream>
#include <bitset>
#include <string>
#include <sstream>
using namespace std;
string convert_ip(string ip_str)
{
// Convert the binary string to decimal
bitset<32> ip_bits(ip_str);
int ip_dec = ip_bits.to_ulong();
// Split the decimal number into 4 parts
int ip_parts[4];
ip_parts[0] = ip_dec >> 24;
ip_parts[1] = ip_dec >> 16 & 0xff;
ip_parts[2] = ip_dec >> 8 & 0xff;
ip_parts[3] = ip_dec & 0xff;
// Join the parts into the final IP address string
stringstream ip_ss;
ip_ss << ip_parts[0] << "." << ip_parts[1] << "." << ip_parts[2] << "." << ip_parts[3];
return ip_ss.str();
}
int main()
{
cout << convert_ip("01111001000010100000101001110010") << endl; // 121.10.10.114
return 0;
}