文件转换为数组或者指针的问题!
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一样处理