作者edward15241 (笨笨尧)
看板Programming
标题[问题] 请问C/C++ 如何将资料1bit 1bit的读进档
时间Mon Oct 20 15:00:53 2014
如题 要如何将资料1bit 1bit写进档案里?
因为要小弟写压缩的功课 每次编码之後要output时必须写出每个bit逐一写出档案
但苦无办法
目前我只想到一种替代方法 就是用全域变数 设一个阵列去存编码 一个变数去数
每集满八个(满1 byte)就输出一次 然後将阵列的计数变成0 阵列清空 一直做下去
如下面范例
int bitString[8];/* 负责蒐集bit */
int count = 0;
FILE *fp ; /* 负责写档的档案指标(全域变数) 在编码的函示里面开档*/
void putbit(int val){ /* 负责将编完的码写到档案里 */
bitString[count++] = val;
if(count==8){ /* 集满八个 */
val = 128*bitString[0]+64*bitString[1]+ ... +1*bitString[7];
fprintf(fp,"%c",val);
清空 bitString
count = 0;
}
}
可是在此遇到问题 我利用全域变数档案指标开档 然後在自己写的encode函式里面开档
encode里面又呼叫putbit( 程式码在上面 ) 负责把编码输出 可是写不进去
档案是空的 是开档用全域变数会有问题吗? 或是有没有其他的方法能1bit 1bit输出呢?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.122.184.149
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/Programming/M.1413788456.A.2FF.html
1F:→ alibuda174: fprintf(fp,"%c",)没有输出的东西 118.168.43.90 10/20 15:14
2F:推 mars90226: 最低输出单位就是1个字元,你这个做法 1.171.164.194 10/20 16:18
3F:→ mars90226: 概念是对的 1.171.164.194 10/20 16:18
4F:→ edward15241: 恩 我发文打错了 code里有140.122.184.149 10/20 17:13
5F:→ edward15241: 我改一下 3Q140.122.184.149 10/20 17:13
※ 编辑: edward15241 (140.122.184.149), 10/20/2014 17:15:20
6F:→ alibuda174: 检查fprintf回传值 若是负数代表出错 118.168.43.90 10/20 21:17
7F:→ alibuda174: 然後用perror印出原因 118.168.43.90 10/20 21:18
8F:推 bxxl: 你是程式执行中去看 还是执行完去看档案? 114.45.140.30 10/20 22:27
9F:→ bxxl: 执行中档案内容可能还在buffer里, 不会你每 114.45.140.30 10/20 22:28
10F:→ bxxl: 写一个字元 他就在档案多一个字元, 要累积到 114.45.140.30 10/20 22:29
11F:→ bxxl: 一个量才会一次写一批出去 114.45.140.30 10/20 22:29
12F:→ edward15241: 我是跑完才去看档案的140.122.184.149 10/21 11:10
13F:→ edward15241: 感谢ali大大 我试试看140.122.184.149 10/21 11:11