C++将文件转换成二进制数据流

最近学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(...);