| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1175 人关注过本帖
标题:文件转换的问题
只看楼主 加入收藏
clcqifeng
Rank: 2
等 级:论坛游民
帖 子:101
专家分:17
注 册:2012-2-16
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:22 
文件转换的问题
#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
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
先把變換公式設計好

授人以渔,不授人以鱼。
2012-02-22 23:07
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
总的来说,不按字节处理的话是很费劲的,我以前也没干过类似的事。是不是可以这样:

压缩的时候,以8个字节为一组,然后你把每个字符压掉一位,总体就会变成 7 个字节,然后写入另一个文件。解压的时候相反,读 7 个,再扩展成 8 个。
文件末端不足的少量字节最后单独处理一下。

2012-02-22 23:23
clcqifeng
Rank: 2
等 级:论坛游民
帖 子:101
专家分:17
注 册:2012-2-16
收藏
得分:0 
回复 4楼 pangding
图片附件: 游客没有浏览图片的权限,请 登录注册

就像这个那样。字符会以8位的2进制保存。因为实际用到的才7位。想把头一位0给去掉
2012-02-23 09:03
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
总之文件是只能字节为单位的,所以你做的这件事的意图并不是十分清晰。
比如你一楼举的那个例子,可以这么移一下,但最后两位不可能这么空着的,只能靠逻辑推出它们是两位垃圾值。

如果你想实现类似简单加密的一种行为,这么做还可以接受。如果只是觉得浪费空间,那就很不值,人们专门研究过压缩字符的算法,压缩率和压缩解压的速度都比这个好。
2012-02-23 10:58
clcqifeng
Rank: 2
等 级:论坛游民
帖 子:101
专家分:17
注 册:2012-2-16
收藏
得分:0 
回复 6楼 pangding
就是这个程序的字符打印出来都是01100101    01001001   01110011这样的。.我就想知道...如何能把前面的0去掉.然后后面的往前推.    1100101010010011110011XXX那样子.每个前面都去掉个0,后面的补上.
2012-02-23 11:25
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
哦。原来那个 read write 的帖子也是你问的。
这个不是直接对着二进制文件动手,文件里的东西也都是一个字节一个字节的。

我就问你一个简单的问题,给你一个 'a',你能输出它 ascii 码对应的二进制字符串吗?
如果能的话,另一个简单的问题是。给你一个字符串,你能越过第一个字符,从第二个字符开始输出吗?

相反的情况是这样:给你一个字符串,你能在最前面加一个'0'吗?(其实不加也行,你可以直接做第二步)
给你一个用字符串表示的二进制数,你能输出其 ascii 码对应的字符吗?

如果这几件事你都会,我想你就完全能看懂你问的那些代码了是在干什么了。


[ 本帖最后由 pangding 于 2012-2-23 15:30 编辑 ]
2012-02-23 15:29
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
快速回复:文件转换的问题
数据加载中...
 
   



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

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