首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

文件转换为数组或者指针的有关问题

2012-03-02 
文件转换为数组或者指针的问题!while(fread(data,sizeof(short),Enc_Inst.blockl,ifileid)Enc_Inst.bloc

文件转换为数组或者指针的问题!
while   (fread(data,sizeof(short),Enc_Inst.blockl,ifileid)==Enc_Inst.blockl)
      {
                      len=encode(&Enc_Inst,   encoded_data,   data);

                      fwrite(encoded_data,   sizeof(unsigned   char),   len,   efileid);

            }

注释:

Enc_Inst.blockl为一个固定值,是每次从文件写到缓冲区的个数.
ifileid为文件指针,是等待压缩的文件指针。
data是缓冲区.存放等待压缩的数据.
encode(&Enc_Inst,   encoded_data,   data);是一个压缩处理函数,返回压缩后数据的长度.len为short型.

efileid为文件指针,是压缩后文件指针。
len是上面压缩后得到的数据长度.
encoded_data是缓冲区,存放压缩以后的数据.


现在我想把这段代码中的文件去掉,就是把ifileid和efileid也换成缓冲区(指针或者数组都可以).我改后无法实现原有的功能,请高手帮帮忙,怎么才能实现把文件转换为缓冲区?

谢谢大家了。




[解决办法]
执行出错还是加密的数据不对?

别的地方没发现什么异常,不过就是对末尾数据的处理上两个程序不一样
你仔细看一下你原来的程序,在最后的的数据不够Enc_Inst.blockl的大小时,是不对那些数据加密的.
而你后来改的,对最后的数据,即使不够,你也进行了加密.



[解决办法]
文件改为指针那就更简单了

可能在
1.*endataLen 在最前面赋0 初始否则可能外面不初始会乱掉
2.while(dataLength> =Enc_Inst.blockl) 把> =改为> 如果正好相等不知道memcpy会不会出问题
或者encoude函数会不会判别0的情况

[解决办法]
while(StartLen> =Enc_Inst.blockl)
//while(StartLen> =Enc_Inst.blockl*sizeof(short))
[解决办法]
如果你不想改变整个函数的话,就从新实现一下fread和fwrite改称操作缓冲区的
struct MF{
unsigned int _size;
unsigned int _len;
unsigned char * buff;
};

int _fread( void* buff, int size, int len, struct MF *f )
{
int nread = size*len;

if ( nread + offset > = size )
nread = size - offset;
memcpy( buff, f-> buff + offset, nread );
f-> offset += nread;

return nread;
}

#define fread( _b, _s, _l, _f ) _fread( _b, _s, _l, (struct MF*)(_f) )
而在你打开原来ifileid的地方 struct MF _tf; _tf.offset = 0; _tf.size = input buffer size; _tf.buff = input buffer
fwrite一样处理

热点排行