精华内容
下载资源
问答
  • c语言ip地址转换
    2021-05-21 01:06:56

    根据需要将任意32位二进制转换为IP地址。

    输入:11111111

    输出:255.0.0.0

    思路:将输入的二进制数以每8个为一个单位转化为十进制 。

    #include

    int bin_dec(int x, int n) //自定义函数将二进制数转换为10进制

    {

    if(n == 0)

    {

    return 1;

    }

    return x * bin_dec(x, n-1); //递归调用bin_dec()函数

    }

    int main(void)

    {

    int i;

    int ip[4] = {0};

    char a[33];

    printf("请输入二进制数: \n");

    scanf("%s", a);

    for(i=0; i<8; i++)

    {

    if(a[i] == '1')

    {

    ip[0] += bin_dec(2, 7-i);

    }

    }

    for(i=8; i<16; i++)

    {

    if(a[i] == '1')

    {

    ip[1] += bin_dec(2, 15-i);

    }

    }

    for(i=16; i<24; i++)

    {

    if(a[i] == '1')

    {

    ip[2] += bin_dec(2, 23-i);

    }

    }

    for(i=24; i<32; i++)

    {

    if(a[i] == '1')

    {

    ip[3] += bin_dec(2, 31-i);

    }

    if(a[i] == '\0')

    {

    break;

    }

    }

    printf("IP:\n");

    printf("%d.%d.%d.%d\n", ip[0], ip[1], ip[2], ip[3]);//输出IP地址

    return 0;

    }

    更多相关内容
  • 目标:分离ip地址中的4个数字。 初看不难,但实际大有门道。此题实际考察用C语言对字符串的处理,若是单独的一个数字字符串,比如“255’,将其转化为数字并不难,方法很多,可以直接使用库函数atoi,也可以将字符...

    今天遇到一个面试测试题,如下

    请写一段代码,可以将输入为”0.0.0.0”—“255.255.255.255”的字符串转换为int型整数数组。

    输入:”255.255.255.255”

    输出:255 255 255 255 (数组)

    简要分析如下

    目标:分离ip地址中的4个数字。

    初看不难,但实际大有门道。此题实际考察用C语言对字符串的处理,若是单独的一个数字字符串,比如“255’,将其转化为数字并不难,方法很多,可以直接使用库函数atoi,也可以将字符串的每一位取出,再减去字符‘0’,即得到当前位的真实数值,循环使用乘以10加下一位即可,还有其他方法...

    但是此题多了一个小数点分割,所以增加了难度,可以考虑以小数点为定位符,将每一部分取出,一共可取出4个子串,再对每个子串转换成数字即可,当遇到结束符‘\0’即表示分割结束

    我的解决方案

    #include <stdio.h>
    // 时间:2020年7月24日08:30 
    // 测试题,输入255.255.255.255的字符串,输出255 255 255 255 的数组 
    char ipstr[15];
    int result[4];
    void ipstr2num(char *str); 
    int main(void) 
    {
    	printf("请输入一个合法的ip地址\n");
    	scanf("%s", &ipstr);
    	ipstr2num(ipstr);
    	return 0;
    }
    void ipstr2num(char* str)
    {
    	int i = 0;
    	int j = 0;
    	char new_str[3];
    	int num = 0;
    	while(*str != '\0')
    	{
    		while((*str != '.') && (*str != '\0'))
    		{
    			new_str[i] = *str;
    			num = num * 10 + new_str[i] - '0';
    			str += 1;
    			i += 1;
    		}
    		result[j] = num;
    		num = 0;
    		printf("%d \t",result[j]);
    		if (*str == '\0')
    		{
    			break;
    		}
    		else
    		{
    			str += 1;
    			i = 0;
    			j += 1;	
    		}	
    	}
    }

    运行结果

     

    我看到另一位大佬的解决方案

    使用了sscanf函数

     

    #include <stdio.h>
    char str[] = "255.255.255.255";
    int num[4] = {0};
    int main()
    {
    	int i = 0;
    	scanf("%s.%s.%s.%s",str);
    	sscanf(str,"%d.%d.%d.%d", &num[0], &num[1], &num[2], &num[3]);
    	for (i = 0; i < 4; i++)
    	{
    		printf("%d\n", num[i]);
    	}
    	return 0;
    }

     

     

    展开全文
  • IP地址转换

    项目中遇到很多种类型主机序和网络序互转的情况,通过下面样例,对不同的情况进行代码实现。本文只介绍转换方法,不介绍网络序和主机序的区别。

    情景一:网络字节序转主机序

    解析处理网络数据报文时,经常遇到将解析出的IP地址或者PORT等信息保存下来,此时部分需求是保存为主机序列,部分要求为网络序(进行二次匹配查询时不必再次转换)

    无符号整型数字网络序转主机序代码如下:

    #include <stdio.h>
    #include <arpa/inet.h>
    
    #define NET_NUM 123
    
    int main(void)
    {
        // 1字节数字转换(不用转换)
        uint8_t num0 = NET_NUM;
        printf("num0 = %u\n", num0);
        
        // 2字节数字转换
        uint16_t num1 = ntohs(NET_NUM);
        printf("num1 = %u\n", num1);
        
        // 4字节数字转换
    	uint32_t num2 = ntohl(NET_NUM);
    	printf("num2 = %u\n", num2);
        
        // 8字节数字转换
        uint64_t num3 = be64toh(NET_NUM);
        printf("num3 = %lu\n", num3);
    
    	return 0;
    }
    

    情景二:主机序转网络字节序

    有时候通过socket发送数据时,需要先将数据格式化为网络字节序,因此会用到。

    无符号整型数字主机序转网络序代码如下:

    #include <stdio.h>
    #include <arpa/inet.h>
    
    #define HOST_NUM 123
    
    int main(void)
    {
        // 1字节数字转换(不用转换)
        uint8_t num0 = HOST_NUM;
        printf("num0 = %u\n", num0);
        
        // 2字节数字转换
        uint16_t num1 = htons(HOST_NUM);
        printf("num1 = %u\n", num1);
        
        // 4字节数字转换
    	uint32_t num2 = htonl(HOST_NUM);
    	printf("num2 = %u\n", num2);
        
        // 8字节数字转换
        uint64_t num3 = htobe64(HOST_NUM);
        printf("num3 = %lu\n", num3);
    
    	return 0;
    }
    

    情景三:IP地址互相之间的转换

    IPV4占用大小为4字节,IPV6占用大小为16字节,IP地址互相转换代码如下:

    #include <stdio.h>
    #include <arpa/inet.h>
    
    // IPv4
    static void ipv4_tp(char *Ipv4){
        uint32_t net_ipv4, host_ipv4;
        char strIpv4[16] = {0};
        // 点分十制转网络序
        inet_pton(AF_INET, Ipv4, &net_ipv4);
        printf("net_ipv4 	= %u\n", net_ipv4);
        // 网络序转主机序
        host_ipv4 = ntohl(net_ipv4);
        printf("host_ipv4 	= %u\n", host_ipv4);
        // 主机序转网络序
        net_ipv4 = htoln(host_ipv4);
        printf("net_ipv4 	= %u\n", net_ipv4);
       	// 网络序转点分制
        inet_ntop(AF_INET, &net_ipv4, strIpv4, INET_ADDRSTRLEN);
        printf("strIpv4 	= %s\n", strIpv4);
        
        return;
    }
    
    // IPv6
    static void ipv6_tp(char *Ipv6){
        uint32_t net_ipv6[4], host_ipv6[4];
        char strIpv6[64] = {0};
        // 点分十六制转网络序
        inet_pton(AF_INET6, Ipv6, net_ipv6);
        for(int i = 0; i < 4; i++){
            printf("net_ipv6[%d] = %u", i, net_ipv6[i]);
            if(i != 3) printf(" "); else printf("\n");
        }
        // 网络序转主机序
        for(int i = 0; i < 4; i++){
            host_ipv6[i] = ntohl(net_ipv6[i]);
        }
        for(int i = 0; i < 4; i++){
            printf("host_ipv6[%d] = %u", i, host_ipv6[i]);
            if(i != 3) printf(" "); else printf("\n");
        }
        // 主机序转网络序
        for(int i = 0; i < 4; i++){
            net_ipv6[i] = ntohl(host_ipv6[i]);
        }
        for(int i = 0; i < 4; i++){
            printf("net_ipv6[%d] = %u", i, net_ipv6[i]);
            if(i != 3) printf(" "); else printf("\n");
        }
        
        // 网络序转点分制
        inet_ntop(AF_INET6, net_ipv6, strIpv6, INET6_ADDRSTRLEN);
        printf("strIpv6 = %s\n", strIpv6);
        
        return;
    }
    
    int main(void)
    {
        char strIpv4[16] = {"192.168.1.1"};
        char strIPV6[64] = {"fe80::20c:29ff:fe3b:846f"};
        
    	ipv4_tp(strIpv4);
        
        ipv6_tp(strIPV6);
        
    	return 0;
    }
    

    未完待续~

    展开全文
  • C语言,二进制转ip//输入一连串的二进制数,转换IP地址#include #include#includeint Sort(int x, int n);int main(void){int i;int ip[4] = { 0 };char Num[33];printf("请输入二进制数: \n");scanf_s("%s", Num,...

    C语言,二进制转ip

    //输入一连串的二进制数,转换成IP地址

    #include

    #include

    #include

    int Sort(int x, int n);

    int main(void)

    {

    int i;

    int ip[4] = { 0 };

    char Num[33];

    printf("请输入二进制数: \n");

    scanf_s("%s", Num,32);

    for (i = 0; i<8; i++)//求ip的第一位数

    {

    if (Num[i] == '1')

    {

    ip[0] +=Sort(2, 7 - i);

    }

    }

    for (i = 8; i<16; i++)//求IP地址的第二位数

    {

    if (Num[i] == '1')

    {

    ip[1] += Sort(2, 15 - i);

    }

    }

    for (i = 16; i<24; i++)//求IP地址的第三位数

    {

    if (Num[i] == '1')

    {

    ip[2] += Sort(2, 23 - i);

    }

    }

    for (i = 24; i<32; i++)//求ip地址的第四位数

    {

    if (Num[i] == '1')

    {

    ip[3] += Sort(2, 31 - i);

    }

    if (Num[i] == '\0')

    {

    break;

    }

    }

    printf("IP地址是:\n");

    printf("%d.%d.%d.%d\n", ip[0], ip[1], ip[2], ip[3]);//输出IP地址

    syst

    em("pause");

    return 0;

    }

    int Sort(int x, int n) //自定义函数

    {

    if (n == 0)

    {

    return 1;

    }

    return x * Sort(x, n - 1); //递归调用

    }

    展开全文
  • IP地址转换--C语言

    千次阅读 2021-12-27 08:15:09
    C语言指针练习题,IP地址,PTA练习题
  • 7-2 IP地址转换 (20分) 一个IP地址是用四个字节(每个字节8个位)的二进制码组成。请将32位二进制码表示的IP地址转换为十进制格式表示的IP地址输出。 输入格式: 输入在一行中给出32位二进制字符串。 输出格式: ...
  • #include <stdio.h> #include <stdlib.h> #include <...//uint8_t *TargetIP: 返回IP地址 整数 uint8_t iptoint(const char *ip,uint8_t *TargetIP) { char str_ip_index[4]=.
  • #include <stdio.h> #include <string.h> #include <stdlib.h> //192.168.44.5 转 0xc0a82c05 //0c a8 2c 05 int toInt(const char *str) { int num = 0; char buf[20] = {0};...= NU.
  • ip 地址转换函数

    2022-02-08 15:34:10
    地址转换函数 int inet_aton(const char *strptr,struct in_addr *addrptr) 将strptr所指C字符串转换成一个32位的网络字节序二进制值,并同过addrptr指针来存储,成功返回1,失败返回0 int_addr_t inet_addr(const ...
  • C语言字符串十进制ip地址与十六进制转换
  • PTA IP地址转换

    2022-02-08 20:14:26
    请将32位二进制码表示的IP地址转换为十进制格式表示的IP地址输出。 输入格式: 输入在一行中给出32位二进制字符串。 输出格式: 在一行中输出十进制格式的IP地址,其由4个十进制数组成(分别对应4个8位的二进制...
  • 将二进制IP地址转换成十进制(C语言程序实现)/** Name: IP Address* Funcion: To convert binary numbers to decimal numbers* Input: 00000011100000001111111111111111* Output: 3.128.255.255*/#include void main...
  • #include int main(int argc,char *argv[]){const char *ip ="192.168.34.232";char *ipstr=NULL;char str_ip_index[4]={'\0'};unsigned int ip_int,ip_add=0,ip_int_index[4],ip_temp_numbr=24;int j =0,a=3;for(un...
  • #include <stdio.h> #include <stdlib.h> #include <linux/types.h> #include <sys/types.h>...char* longToIp(char* buf, int IPAddr){//ip2long sprintf(buf, "%d.%d.%d.%d", (0X000.
  • 事情是这样的:将点十进制IP地址转换为二进制(Python)input: 142.55.33.1output (base 10): [2385977601]output (base 2): [10001110 00110111 00100001 00000001]到目前为止,我已经成功地将其转换成一个base10地址...
  • C/C++ ip地址与int类型的转换实例详解

    千次阅读 2021-05-21 06:44:09
    C/C++ ip地址与int类型的转换实例详解前言最近看道一个面试题目,大体意思就是将ip地址,例如“192.168.1.116”转换成int类型,同时还能在转换回去思路ip地址转int类型,例如ip为“192.168.1.116”,相当于“.“将ip...
  • } ip地址采用将字符串位成为整型,但是因为IP地址最大位255.255.255.255,转化为整型范围超过了int的取值范围,所以应该为unsigned int类型,因为本例中转换失败时函数返回-1,所以就定义为long型,long在64位机时...
  • #define _CRT_SECURE_NO_WARNINGS #include&lt;stdio.h&...// 实现把一个IP转换成整型,并输出,并且能把整型转换IP地址。 typedef union { unsigned char data[4]; unsigned int i...
  • c语言,包含获取指定网口ip地址,mac地址,网关,以及c语言实现修改ip,网关,子网掩码,以及设置socket套接字加入到多播组的方法;可以实现linux下的time_t和字符串的相互转换
  • IP地址转换c语言

    千次阅读 2021-03-28 17:37:03
    IP地址转换题目答案 题目 答案 #include<stdio.h> #include<string.h> #include<math.h> int main() { char str[40]; gets(str); int count1=0,count2=0,sum=0,flag=0,n=strlen(str),i; for...
  • IP地址字符串转二进制C程序实现

    千次阅读 2022-02-16 16:29:35
    IP地址字符串转二进制C程序实现。
  • IP地址转换为整数

    千次阅读 2021-11-10 16:54:25
    IP地址转换为整数:比如"192.168.1.254",以点为分割,将192 168 1 254保存在一个int a[4]数组里,然后通过unsigned int nResult = (a[3] << 24) + (a[2] << 16) + (a[1] << 8) + a[0]得到一个无...
  • 本文主要讲了C语言中将数字转换为字符串的方法,希望对你的学习有所帮助。
  • 假设需要编写一个程序,实现32位二进制IP地址(32个字符长的1和0)转换为点分十进制格式并输出。IP地址的点分十进制格式通过将32位从低位到高位(右到左)一次分组八位,总共分4次,任何8位二进制数对应的十进制数都...
  • IP地址一般是一个32位的二进制数, 如果将IP地址转换成二进制表示应该有32bits,但是它通常被分割为4个“8位二进制数”(4个字节)。IP地址通常用“点分十进制”表示成(a.b.c.d)的形式,其中,a,b,c,d都是0~255之间...
  • title: "Golang Ip地址字符串整数string Int相互转换"date: 2021-01-29T21:06:57+08:00draft: truetags: ['go']author: "dadigang"author_cn: "大地缸"personal: "http://www.real007.cn"Go IP 地址字符串整数/...
  • 一个非常简单的ip地址十进制转换成二进制的实现,输入格式: 123.45.67.8[回车] 输出格式: 01111011:00101101:01000011:00001000 循环输入,循环输出,Ctrl+D结束。
  • IP地址点分十进制数:255.255.255.255 最多共计15位。 我们采用16数组的形式,将ip存储位字符串。 char cip[16]={0}; memcpy(cip,"255.255.255.255",15); 这样cip就是一个字符串形式。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 31,749
精华内容 12,699
关键字:

c语言ip地址转换