使用Atl Base64 对文件编解码

 

#include "atlenc.h"

errno_t fileBase64Encode(const char *srcFile, const char *dstFile)
{
  FILE *fr = NULL, *fw = NULL;
  errno_t err = 0;
  
  if(err == 0)
  {
    err= fopen_s(&fr, srcFile, "rb");
    if(err != 0)
    {
      printf( "The file '%s' can't be open\n", srcFile );
    }
  }
  
  if (err == 0)
  {
    err = fopen_s(&fw, dstFile, "wb");
    if(err != 0)
    {
      printf( "The file '%s' can't be open\n", dstFile );
    }
  }

  if(err == 0)
  {
    const int tLen = ATLSMTP_MAX_BASE64_LINE_LENGTH; // = 57
    BYTE srcBuf[tLen + 1];
    char dstBuf[tLen * 4 /3 + 5]; //+\r\n\r\n\0 //

    size_t nTotal = 0;
    while(!feof(fr))
    {
      int nLen = fread(srcBuf, 1, tLen, fr);
      int i = Base64EncodeGetRequiredLength(nLen);
      Base64Encode(srcBuf, nLen, dstBuf, &i);
      nTotal += fwrite(dstBuf, 1, i, fw);       
    }
  }

  if(fr)
    fclose(fr);
  if(fw)
    fclose(fw);

  return err;
}

errno_t fileBase64Decode(const char *srcFile, const char *dstFile)
{
  FILE *fr = NULL, *fw = NULL;
  errno_t err = 0;
  
  if(err == 0)
  {
    err= fopen_s(&fr, srcFile, "rb");
    if(err != 0)
    {
      printf( "The file '%s' can't be open\n", srcFile );
    }
  }
  
  if (err == 0)
  {
    err = fopen_s(&fw, dstFile, "wb");
    if(err != 0)
    {
      printf( "The file '%s' can't be open\n", dstFile );
    }
  }

  if(err == 0)
  {
    const int tLen = ATLSMTP_MAX_QP_LINE_LENGTH + 2; //76+2
    char srcBuf[tLen+1];
    BYTE dstBuf[tLen*3/4+1];

    size_t nTotal = 0;
    while(!feof(fr))
    {
      int nLen = fread(srcBuf, 1, tLen, fr);
      int i = Base64DecodeGetRequiredLength(nLen);
      Base64Decode(srcBuf, nLen, dstBuf, &i);
      nTotal += fwrite(dstBuf, 1, i, fw); 
    }
  }

  if(fr)
    fclose(fr);
  if(fw)
    fclose(fw);

  return err;
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值