ip 地址转换(字符串与指针)

img


要求:一个口地址有4个字节,32位二进制码组成,将其转换为4段十进制格式的1P地址格式,并输出。
輸入:01111001000010100000101001110010
輸出:121.10.10.114

用字符串输入,每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;
}

img

#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;
}