最近学C++的时候想了个问题,能否将文件或图片转换成二进制的字符串,
然后在需要的时候将二进制数据转换成文件能,这样就相当于模拟了文件上传的过程,
希望有源码配上详细的注释
void WriteFromStream(char * buf,char * filename,UINT size)
{
FILE * f = fopen(filename,"wb+");
if (f)
{
fwrite(buf,1,size,f);
fclose(f);
}
}
void ReadToStream(char * filename)
{
FILE * f = fopen(filename,"rb");
if (f)
{
fseek(f,0,SEEK_END);
int size = ftell(f);
char * buf = new char[size];
fseek(f,0,SEEK_SET);
memset(buf,0,size);
int nRead = fread(buf,sizeof(char),size,f);
fclose(f);
if (nRead > 0)
{
//将二进制流打印成16进制字符串
for(unsigned int i = 0; i < nRead;i++)
{
printf("%02X ",(unsigned char)buf[i]);
if (i%16 == 15)
{
printf("\n");
}
}
}
char new_file[MAX_PATH] = "";
sprintf(new_file,"new_%s",filename);
WriteFromStream(buf,new_file,size);
WinExec("explorer .",SW_SHOW);
delete buf;
}
}
int main(int argc,char **argv)
{
ReadToStream("temp.zip");
return 0;
}
一般是转成base64编码。因为base64使用64个元字符,所以它比诸如00 FA 00 1E之类的十六进制字符串(使用16个元字符)的存储效率高4倍。
http://download.csdn.net/detail/u011023645/6586227
我之前问过这样的问题。将二进制字符串转换成位图。
我只是一时好奇,所以得有源码给我分析分析才行,悬赏不会少,毕竟我是菜,所以悬赏会多些,只为求详细点的源码
//读到二进制
FILE * f = fopen(filename,"rb");
fseek(f,0,SEEK_END);
long size = ftell(f);
char * buf = new char[size];
fread(buf,sizeof(char),size,f);
//写到二进制,和读差不多
fwrite(...);