| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1175 人关注过本帖
标题:文件转换的问题
取消只看楼主 加入收藏
clcqifeng
Rank: 2
等 级:论坛游民
帖 子:101
专家分:17
注 册:2012-2-16
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:11 
文件转换的问题
#include <stdio.h>
int main()
{
    char binary[100];
    char b;
    for (b= '0'; b<'z'; b++){
    FILE *fp = fopen("abc.txt", "a");
    itoa(b, binary, 2);
    fprintf(fp,"%s\n",binary);
    }
}

这个程序是把字符以2进制的显示打印在文件夹里。
保存了最大的是1111001。但默认字节是01111001这样8个字节的。我想把他压缩为1111001这样7个字节的abc.enc文件
如何运行程序就能把abc.txt生成abc.enc而且把保存的字节由8位变成7位。再次运行程序再把abc.enc变回abc.txt。
图片附件: 游客没有浏览图片的权限,请 登录注册



[ 本帖最后由 clcqifeng 于 2012-2-23 09:01 编辑 ]
搜索更多相关主题的帖子: 文件夹 而且 运行程序 include 最大的 
2012-02-22 15:17
clcqifeng
Rank: 2
等 级:论坛游民
帖 子:101
专家分:17
注 册:2012-2-16
收藏
得分:0 
谁帮忙给点提示阿~
2012-02-22 21:19
clcqifeng
Rank: 2
等 级:论坛游民
帖 子:101
专家分:17
注 册:2012-2-16
收藏
得分:0 
回复 4楼 pangding
图片附件: 游客没有浏览图片的权限,请 登录注册

就像这个那样。字符会以8位的2进制保存。因为实际用到的才7位。想把头一位0给去掉
2012-02-23 09:03
clcqifeng
Rank: 2
等 级:论坛游民
帖 子:101
专家分:17
注 册:2012-2-16
收藏
得分:0 
回复 6楼 pangding
就是这个程序的字符打印出来都是01100101    01001001   01110011这样的。.我就想知道...如何能把前面的0去掉.然后后面的往前推.    1100101010010011110011XXX那样子.每个前面都去掉个0,后面的补上.
2012-02-23 11:25
clcqifeng
Rank: 2
等 级:论坛游民
帖 子:101
专家分:17
注 册:2012-2-16
收藏
得分:0 
回复 8楼 pangding
现在知道怎么输出了.用>>这个符号...重点是...文件怎么同时读写....我读了8字节2进制码.然后通过>>选择了没有第一位的7个字节的2进制码...问题来了..我是打开文件以读方式的..现在得到那些码了.怎么写回进文件里头...
2012-02-23 16:46
clcqifeng
Rank: 2
等 级:论坛游民
帖 子:101
专家分:17
注 册:2012-2-16
收藏
得分:0 
回复 8楼 pangding
那字符8个字节的由于01001001第一位都是0.  
  int i = 7;
  int j = 0;
  fread(&c, 1, sizeof(char), fp);
  while(!ferror(fp) && !feof(fp)){
      k = 7;
      while(k-- >0){
       if(c >> k & 0x00000001){
            b[j++] = '1';
       }
       else{
           b[j++] = '0';
我用这个读了每个字符的后7个字节.......然后...然后以7位输出...=_=然后怎么写进文件里....还有..反之..以2进制写进文件里后...怎么恢复回来....求指导阿.前辈`
2012-02-23 18:02
clcqifeng
Rank: 2
等 级:论坛游民
帖 子:101
专家分:17
注 册:2012-2-16
收藏
得分:0 
回复 11楼 pangding
void transe_abc()
{
  FILE *fp =fopen("abc.txt", "rb");
  int c;
  char b[2048];   
  int k;
  int i = 7;
  int j = 0;
  fread(&c, 1, sizeof(char), fp);
  while(!ferror(fp) && !feof(fp)){
      k = 7;
      while(k-- >0){
       if(c >> k & 0x00000001){
            b[j++] = '1';
       }
       else{
           b[j++] = '0';
       }
       b[j++] = ' ';
       if(--i == 0){
         b[j++] = 0;
         printf("%s",b);
         j = 0;
         i = 7;
       }
      }

      fread(&c, 1 ,sizeof(char), fp);      
  }
  fclose(fp);

  if(i){
      while(i--){
        printf("   ");
      }
       b[j] = 0;
       printf("%s\n",b);
  }
}

像这个我读了文件里7个字符..如何再写回进去.. FILE *fp =fopen("abc.txt", "rb");不能同时读写把..就这里不懂..求指导...
2012-02-27 08:57
clcqifeng
Rank: 2
等 级:论坛游民
帖 子:101
专家分:17
注 册:2012-2-16
收藏
得分:0 
回复 13楼 pangding
void transe_abc()                              /*把abc.txt文件转换成abc.enc   把每个字符8个字节删减为只保留后面7个字节*/
{
  FILE *fip =fopen("abc.txt", "rb");
  FILE *fop =fopen("temp", "wb");
  int  e;
  char f = 0;
  int  g = 8;
  int c;
  char b[2048];
  char d[2048];
  int k;
  int i = 7;
  int j = 0;
  int l = 0;
  fread(&c, 1, sizeof(char), fip);
  while(!ferror(fip) && !feof(fip)){
      k = 7;
      while(k-- >0){
        if(c >> k & 0x00000001){
            b[j++] = '1';
            d[l++] = '1';
      }
      else{
        b[j++] = '0';
        d[l++] = '0';
       }
      b[j++] = ' ';
      if(--i == 0){
        b[j++] = 0;     
        j = 0;
        i = 7;
       }
      }
      fread(&c, 1 ,sizeof(char), fip);      
  }
  if(i){
      while(i--){
        printf("   ");
      }
       b[j] = 0;
  }
  printf("%s",d);
  for(e=0; e<strlen(d); e++){
       if (d[e] == '0'){
          f = f<<1;
          g--;
       }
       else if (d[e] == '1'){
          f = f<<1;
          f += 1;
          g--;
       }
       if (g == 0){
          fwrite(&f, 1, sizeof(f), fop);
          f = 0;
          g = 8;
       }
  }
  if (g != 8){
         while (g--){
             f = f << 1;
         }
         fwrite(&f, 1, sizeof(f), fop);
  }  
  fclose(fip);
  fclose(fop);
  system("del abc.txt");
  system("move temp abc.enc");
}


=_=好了.....我没学过别的语言.....终于搞掂了...txt转换enc    取后七个字符..加密...
现在问题又来了=_=解密.....enc变回txt  ~~我知道是在前面加个0.但不知道怎么表达。。。
2012-02-28 09:49
clcqifeng
Rank: 2
等 级:论坛游民
帖 子:101
专家分:17
注 册:2012-2-16
收藏
得分:0 
回复 13楼 pangding
void transt_abc()                              /*把abc.enc文件转换成abc.txt*/
{  
  FILE *fip =fopen("abc.enc", "rb");
  FILE *fop =fopen("temp", "wb");
  int  e;
  char f = 0;
  int  g = 8;
  int c;
  char b[2048];
  char d[2048];
  int k;
  int i = 8;
  int j = 0;
  int l = 0;
  fread(&c, 1, sizeof(char), fip);
  while(!ferror(fip) && !feof(fip)){
      k = 8;
      while(k-- >0){
        if(c >> k & 0x00000001){
            b[j++] = '1';
            d[l++] = '1';
      }
      else{
        b[j++] = '0';
        d[l++] = '0';
       }
      b[j++] = ' ';
      if(--i == 0){
        b[j++] = 0;     
        j = 0;
        i = 8;
       }
      }
      fread(&c, 1 ,sizeof(char), fip);      
  }
  if(i){
      while(i--){
        printf("   ");
      }
       b[j] = 0;
  }
  printf("%s",d);
  for(e=0; e<strlen(d); e++){
        if (g== 8){
          f = f<<1;
          g--;
        }        
        if (d[e] == '0'){
          f = f<<1;
          g--;
        }
        else if (d[e] == '1'){
          f = f<<1;
          f += 1;
          g--;
        }
      if (g == 0){
          fwrite(&f, 1, sizeof(f), fop);
          f = 0;
          g = 8;
       }
  }
  if (g != 8){
         while (g--){
             f = f << 1;
         }
         fwrite(&f, 1, sizeof(f), fop);
  }  
  fclose(fip);
  fclose(fop);
  system("del abc.enc");
  system("move temp abc.txt");
}


解密也好了       不过现在例如文件里有aa一个字符2进制码为01100001 01100001加密后前面会变成11000011 11000010..然后再解密就变 01100001 01100001 00000000  后面会多出一个 00000000  要怎么把多出那个删除呢。。。
2012-02-28 11:05
clcqifeng
Rank: 2
等 级:论坛游民
帖 子:101
专家分:17
注 册:2012-2-16
收藏
得分:0 
回复 13楼 pangding
  for(e=0; e<strlen(d); e++){
        if (g== 8){
          f = f<<1;
          g--;
        }        
        if (d[e] == '0'){
          f = f<<1;
          g--;
        }
        else if (d[e] == '1'){
          f = f<<1;
          f += 1;
          g--;
        }
      if (g == 0){
          fwrite(&f, 1, sizeof(f), fop);
          f = 0;
          g = 8;
       }
  }
  if (g != 8){
         while (g--){
             f = f << 1;
         }


好了..这个问题我也解决了``不用了..把最后面那个写入删除就OK了,,,,....
2012-02-28 11:15
快速回复:文件转换的问题
数据加载中...
 
   



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

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