免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1323 | 回复: 7
打印 上一主题 下一主题

问个小问题~^_^ [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-08-06 03:33 |只看该作者 |倒序浏览
偶想一段数据转换一下,就像下面那个样子:
    211.098.000.000~211.098.127.255 中国铁道电信    ->;     (11010011 01100010 00000000 00000000) (11010011 01100010 01111111 11111111) 中国铁道电信

(中间出了点莫名其妙的问题)
代码如下:
  1. #include <stdio.h>;
  2. #include <stdlib.h>;
  3. #include <string.h>;

  4. int addr[2][4];
  5. char buffer[100];

  6. int main(int argc, char *argv[])
  7. {
  8.         FILE * in, * out;
  9.         int tmp;

  10.         switch(argc)
  11.         {
  12.                 case 2:
  13.                         out = stdout;
  14.                         break;
  15.                 case 3:
  16.                         if((out = fopen(argv[2],"w")) == NULL)
  17.                         {
  18.                                 printf("export file open error!!");
  19.                                 exit(2);
  20.                         }
  21.                         break;
  22.                 default:
  23.                         printf("input error!!");
  24.                         exit(1);
  25.         }

  26.         if((in = fopen(argv[1],"r")) == NULL)
  27.         {
  28.                 printf("inport file open error!!");
  29.                 exit(2);
  30.         }

  31.         while(feof(in) == 0)
  32.         {
  33.                 fscanf(in,"%d.%d.%d.%d~%d.%d.%d.%d %s%*[^\n]",
  34.                         &addr[0][0],&addr[0][1],&addr[0][2],&addr[0][3],&addr[1][0],&addr[1][1],&addr[1][2],&addr[1][3],buffer);
  35.                 for(int i = 0; i < 8; i++)
  36.                 {
  37.                         if(4 == i || 0 == i)fprintf(out,"(");

  38.                         for(int j = 0; j < 8; j++)fprintf(out,"%d", (addr[i/4][i%4] >;>; (7-j)) & 0x1);

  39.                         if(7 == i || 3 == i)fprintf(out,") ");
  40.                         else fprintf(out," ");
  41.                 }
  42.                 fprintf(out,"%s\n",buffer);
  43.         }
  44.        
  45.         fclose(in);
  46.         if(argc == 3)fclose(out);

  47.         printf("complete!!");
  48.         return 0;
  49. }
复制代码

编译选项如下:
    --std=c99
    (DEV-CPP 4.9.9.9编译)

运行的时候运行到一半的时候就定在一个位置了
    (11001011 11011111 00000000 00000000) (11001011 11011111 11111111 11111111) 中国
    (11001011 11011000 00000000 00000000) (11001011 11011000 11111111 11111111) 日本
    (11001011 11010000 00001000 00000000) (11001011 11010000 00010010 11111111) 广东深圳讯业金网用户
    (11001011 11010000 00000111 00000000) (11001011 11010000 00000111 11111111) 武汉讯业金网用户
    (11001011 11010000 00000110 00000000) (11001011 11010000 00000110 11111111) 北京讯业金网用户
    (11001011 11010000 00000100 00000000) (11001011 11010000 00000101 11111111) 广东深圳讯业金网用户
    (11001011 11010000 00000011 00000000) (11001011 11010000 00000000 11111111) 广东深圳讯业金网用户
    (11001011 11010000 00000011 00000000) (11001011 11010000 00000000 11111111) 广东深圳讯业金网用户
    (11001011 11010000 00000011 00000000) (11001011 11010000 00000000 11111111) 广东深圳讯业金网用户
    (11001011 11010000 00000011 00000000) (11001011 11010000 00000000 11111111) 广东深圳讯业金网用户

就是这样,就定在那了~~~~
下面是一段原始数据
    224.000.000.000~224.255.255.255 美国南加利福尼亚大学
    217.000.000.000~223.255.255.255 尚未分配
    216.244.192.000~216.244.207.255 阿根廷
    216.154.000.000~216.154.255.255 加拿大
    216.000.000.000~216.255.255.255 美国/加拿大
    214.000.000.000~215.255.255.255 美国国防部网络(弗吉尼亚州)
    212.216.160.000~212.216.167.255 意大利
    212.156.000.000~212.156.193.255 土耳其
    212.020.096.000~212.020.111.255 捷克在线
    212.000.000.000~213.255.255.255 欧洲
    211.098.000.000~211.098.127.255 中国铁道电信
    211.094.000.000~211.103.255.255 中国
    211.072.000.000~211.075.255.255 台湾
    211.069.128.000~211.069.143.255 华中农业大学
    211.069.112.000~211.069.119.255 娄底师范高等专科学校
    211.069.104.000~211.069.111.255 衡阳师范学院
    211.069.096.000~211.069.103.255 郴州师范高等专科学校
    211.069.080.000~211.069.095.255 湖南商学院
    211.069.072.000~211.069.079.255 湖南第一师范
    211.069.000.000~211.069.015.255 河南机电高等专科学校
    211.068.240.000~211.068.255.255 天津农学院
    211.068.236.000~211.068.239.255 天津体育学院
    211.068.232.000~211.068.233.255 中国教育科研网天津主节点
    211.068.224.000~211.068.231.255 天津职业大学
    211.068.208.000~211.068.223.255 天津外国语学院
    211.068.192.000~211.068.207.255 天津音乐学院
    211.068.160.000~211.068.175.255 河北建筑工程学院

到底是什么道理嘛~~帮个忙哈

论坛徽章:
0
2 [报告]
发表于 2005-08-06 09:36 |只看该作者

问个小问题~^_^

看了你的代码后,我不知道
int inet_aton(const char *cp, struct in_addr *inp);
in_addr_t inet_addr(const char *cp);
这些函数是干什么用的了.

论坛徽章:
0
3 [报告]
发表于 2005-08-06 10:13 |只看该作者

问个小问题~^_^

我的对后 面那段数据 没问题的啊

论坛徽章:
0
4 [报告]
发表于 2005-08-06 10:29 |只看该作者

问个小问题~^_^

把这部分先注释调,然后加输出语句判读每次数据是否正确读入;
如果正确读入的话,那就是下面的代码有问题了.

for(int i = 0; i < 8; i++)
      {
         if(4 == i || 0 == i)fprintf(out,"(";

         for(int j = 0; j < 8; j++)fprintf(out,"%d", (addr[i/4][i%4] >;>; (7-j)) & 0x1);

         if(7 == i || 3 == i)fprintf(out," ";
         else fprintf(out," ";
      }

论坛徽章:
0
5 [报告]
发表于 2005-08-06 15:43 |只看该作者

问个小问题~^_^

原帖由 "renstone921" 发表:
把这部分先注释调,然后加输出语句判读每次数据是否正确读入;
如果正确读入的话,那就是下面的代码有问题了

单个循环好像是没问题地~~~
可以正常输出613行,一共3084行

论坛徽章:
0
6 [报告]
发表于 2005-08-06 15:48 |只看该作者

问个小问题~^_^

原帖由 "renstone921" 发表:
看了你的代码后,我不知道
int inet_aton(const char *cp, struct in_addr *inp);
in_addr_t inet_addr(const char *cp);
这些函数是干什么用的了.

没做过网络编程~~~内存管理和文件系统段的内核还没搞定呢
(偶不是程序员,对每种库了解的不是那么多)

论坛徽章:
0
7 [报告]
发表于 2005-08-06 17:07 |只看该作者

问个小问题~^_^

我想可能是输入文件的格式在某个地方有问题造成的,程序中的代码对输入的格式要求太严格.可以重点看看613或614行.
个人觉得应该这样写程序
Hex2BinString()用与将字节转换成2进制字符串
SpliteIP()用于分开两个用~连接的IP
BombIP()用于将IP拆到4字节数组中
主程序只有循环的框架

论坛徽章:
0
8 [报告]
发表于 2005-08-06 18:11 |只看该作者

问个小问题~^_^

原帖由 "apollolegend" 发表:
我想可能是输入文件的格式在某个地方有问题造成的,程序中的代码对输入的格式要求太严格.可以重点看看613或614行.
个人觉得应该这样写程序
Hex2BinString()用与将字节转换成2进制字符串
SpliteIP()用于分开两个用~..........

发现了~~~在614行和615行隐藏着'o'   !!!!!'0'被它给代替了

谢谢你的建议    ~~~不过这么写就是因为数据格式是严格匹配的啊~~~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP