| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2680 人关注过本帖
标题:IP地址转换
只看楼主 加入收藏
裂地劈龙
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2019-12-11
结帖率:0
收藏
已结贴  问题点数:20 回复次数:6 
IP地址转换
一个IP地址是用四个字节(每个字节8个位)的二进制码组成。请将32位二进制码表示的IP地址转换为十进制格式表示的IP地址输出。

输入格式:
输入在一行中给出32位二进制字符串。

输出格式:
在一行中输出十进制格式的IP地址,其由4个十进制数组成(分别对应4个8位的二进制数),中间用“.”分隔开。

输入样例:
11001100100101000001010101110010
输出样例:
204.148.21.114


看下我这个有啥问题
#include <stdio.h>
#include <math.h>
int main()
{
  int a[4][8],i,j,c[4];
  for(i=0;i<4;i++)
  {
   for(j=0;j<8;j++)
   scanf("%d",&a[i][j]);
  }
  for(i=3;i>=0;i--)
  {
    for(j=7;j>=0;j--)
    c[i]=(a[i][j]-'0')*(int)pow(2,7-j);
  }
    for(i=0;i<3;i++)
      printf("%d.",c[i]);
      printf("%d",c[3]);
}
搜索更多相关主题的帖子: 输出 IP 地址 for 格式 
2019-12-12 20:07
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:4 
a[i][j]-'0' 这时干啥的?
2019-12-12 20:22
纯蓝之刃
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:76
帖 子:570
专家分:3727
注 册:2019-7-29
收藏
得分:4 
程序代码:
#include <stdio.h>
#include <string.h>

int main()
{
    int i,j,c[4]={0};
    char ch[33]={0},a[4][8];

    scanf("%s",ch);

    for(i=0;i<4;i++)
    {
        memcpy(a[i],&ch[i*8],8);
        for(j=7;j>=0;j--)
            c[i]|=(a[i][j]-'0')<<(7-j);
    }

    for(i=0;i<3;i++)
        printf("%d.",c[i]);
    printf("%d",c[3]);

    return 0;
}

一沙一世界,一花一天堂。无限掌中置,刹那成永恒。
2019-12-12 20:35
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
我也写一段,仅供参考

程序代码:
#include <stdio.h>
#include <stdint.h>
#include <inttypes.h>

int main( void )
{
    char s[33];
    scanf( "%s", s );

    uint32_t ip = 0;
    for( const char* p=s; *p; ++p )
        ip = ip*2 + *p-'0';
    printf( "%"PRIu32".%"PRIu32".%"PRIu32".%"PRIu32"\n", (ip>>24)&0xFF, (ip>>16)&0xFF, (ip>>8)&0xFF, (ip>>0)&0xFF );
}

2019-12-12 20:40
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:4 
#include <stdio.h>

typedef union _IP
{
    unsigned char c[4];
    unsigned int u;
} IP;

int main()
{
    char s[33];
    int n;
    scanf("%32s%n",s,&n);
    IP ip={0};
    int i;
    for(i=0; i<n; ++i)
        if (s[i]=='1')
            ip.u += 1<<(n-1-i);
    printf("%u.%u.%u.%u",ip.c[3],ip.c[2],ip.c[1],ip.c[0]);
}
2019-12-12 23:03
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1694
专家分:4282
注 册:2007-12-27
收藏
得分:4 
程序代码:
#include <stdio.h>
int main()
{
  int i;
  unsigned char ch;
  for(i=0;i<32;i++)
  {
    ch=(ch<<1)+(getchar()-'0');
    if(i%8==7)printf("%u%c",ch,i<31?'.':'\n');
  }
}

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2019-12-13 10:31
bcbbcclbbc
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:11
帖 子:194
专家分:528
注 册:2019-8-15
收藏
得分:4 
回复 楼主 裂地劈龙
#include <stdio.h>
#include <math.h>
int main()
{
  int a[4][8],i,j;
  int c[4]={0};
  
  for(i=0;i<4;i++)           //给数组赋值,题目:输入在一行中给出32位二进制字符串
  {                          //%d格式符只能让计算机识别一个整数,而无法将32位数给你分成4*8等份
   for(j=0;j<8;j++)          //所以要么定义为字符数组,要么改成%1d限制每次只读取一位数
   scanf("%1d",&a[i][j]);
  }
  //for(int i=0;i<4;i++){ for(int j=0;j<8;j++) printf("%d",a[i][j]); printf(" ");}printf("\n");
  //输出数组
  for(i=3;i>=0;i--)          //这里二进制转十进制,方法就是从右开始每位上的数乘以相应位上的权
  {                          //这个循环中你只计算了每一位的转化,却没有相加,就等于费劲。
    for(j=7;j>=0;j--)
    c[i]+=a[i][j]*(int)pow(2,7-j);          //需对数组初始化
  }
  
    for(i=0;i<3;i++)          //至于输出,没什么问题。如果简洁一点的话可以转化了一个二进制就输出,
      printf("%d.",c[i]);     //不需要定义一个数组,赋值完再输出。
      printf("%d",c[3]);
}

希望有所收获
2019-12-13 10:43
快速回复:IP地址转换
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.030015 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved