CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

求base64编码解码源程序

楼主yymember9(yymember)2002-08-08 13:15:12 在 VC/MFC / 基础类 提问

c/c++的,谢谢,  
  mail:yy_mail@sina.com 问题点数:50、回复次数:4Top

1 楼playguy(playguy)回复于 2002-09-22 13:05:31 得分 10

可以去这里看一看,有完整的解决方案,绝对实用:  
  http://www.aslike.netTop

2 楼oldworm(oldworm)回复于 2002-09-22 13:09:42 得分 15

php里面有源代码,复制了一份  
  /*  
        +----------------------------------------------------------------------+  
        |   PHP   HTML   Embedded   Scripting   Language   Version   3.0                                           |  
        +----------------------------------------------------------------------+  
        |   Copyright   (c)   1997-2000   PHP   Development   Team   (See   Credits   file)             |  
        +----------------------------------------------------------------------+  
        |   This   program   is   free   software;   you   can   redistribute   it   and/or   modify   |  
        |   it   under   the   terms   of   one   of   the   following   licenses:                                   |  
        |                                                                                                                                             |  
        |     A)   the   GNU   General   Public   License   as   published   by   the   Free   Software   |  
        |           Foundation;   either   version   2   of   the   License,   or   (at   your   option)   |  
        |           any   later   version.                                                                                               |  
        |                                                                                                                                             |  
        |     B)   the   PHP   License   as   published   by   the   PHP   Development   Team   and           |  
        |           included   in   the   distribution   in   the   file:   LICENSE                                 |  
        |                                                                                                                                             |  
        |   This   program   is   distributed   in   the   hope   that   it   will   be   useful,             |  
        |   but   WITHOUT   ANY   WARRANTY;   without   even   the   implied   warranty   of               |  
        |   MERCHANTABILITY   or   FITNESS   FOR   A   PARTICULAR   PURPOSE.     See   the                 |  
        |   GNU   General   Public   License   for   more   details.                                                   |  
        |                                                                                                                                             |  
        |   You   should   have   received   a   copy   of   both   licenses   referred   to   here.       |  
        |   If   you   did   not,   or   have   any   questions   about   PHP   licensing,   please         |  
        |   contact   core@php.net.                                                                                                 |  
        +----------------------------------------------------------------------+  
        |   Author:   Jim   Winstead   (jimw@php.net)                                                                     |  
        +----------------------------------------------------------------------+  
    */  
  /*   $Id:   base64.c,v   1.32   2000/01/01   04:31:14   sas   Exp   $   */  
   
  #include   <string.h>  
   
  #include   "php.h"  
  #include   "internal_functions.h"  
  #include   "base64.h"  
   
  static   char   base64_table[]   =  
  {   'A',   'B',   'C',   'D',   'E',   'F',   'G',   'H',   'I',   'J',   'K',   'L',   'M',  
      'N',   'O',   'P',   'Q',   'R',   'S',   'T',   'U',   'V',   'W',   'X',   'Y',   'Z',  
      'a',   'b',   'c',   'd',   'e',   'f',   'g',   'h',   'i',   'j',   'k',   'l',   'm',  
      'n',   'o',   'p',   'q',   'r',   's',   't',   'u',   'v',   'w',   'x',   'y',   'z',  
      '0',   '1',   '2',   '3',   '4',   '5',   '6',   '7',   '8',   '9',   '+',   '/',   '\0'  
  };  
  static   char   base64_pad   =   '=';  
   
  unsigned   char   *_php3_base64_encode(const   unsigned   char   *string,   int   length,   int   *ret_length)   {  
  const   unsigned   char   *current   =   string;  
  int   i   =   0;  
  unsigned   char   *result   =   (unsigned   char   *)emalloc(((length   +   3   -   length   %   3)   *   4   /   3   +   1)   *   sizeof(char));  
   
  while   (length   >   2)   {   /*   keep   going   until   we   have   less   than   24   bits   */  
  result[i++]   =   base64_table[current[0]   >>   2];  
  result[i++]   =   base64_table[((current[0]   &   0x03)   <<   4)   +   (current[1]   >>   4)];  
  result[i++]   =   base64_table[((current[1]   &   0x0f)   <<   2)   +   (current[2]   >>   6)];  
  result[i++]   =   base64_table[current[2]   &   0x3f];  
   
  current   +=   3;  
  length   -=   3;   /*   we   just   handle   3   octets   of   data   */  
  }  
   
  /*   now   deal   with   the   tail   end   of   things   */  
  if   (length   !=   0)   {  
  result[i++]   =   base64_table[current[0]   >>   2];  
  if   (length   >   1)   {  
  result[i++]   =   base64_table[((current[0]   &   0x03)   <<   4)   +   (current[1]   >>   4)];  
  result[i++]   =   base64_table[(current[1]   &   0x0f)   <<   2];  
  result[i++]   =   base64_pad;  
  }  
  else   {  
  result[i++]   =   base64_table[(current[0]   &   0x03)   <<   4];  
  result[i++]   =   base64_pad;  
  result[i++]   =   base64_pad;  
  }  
  }  
  if(ret_length)   {  
  *ret_length   =   i;  
  }  
  result[i]   =   '\0';  
  return   result;  
  }  
   
  /*   as   above,   but   backwards.   :)   */  
  unsigned   char   *_php3_base64_decode(const   unsigned   char   *string,   int   length,   int   *ret_length)   {  
  const   unsigned   char   *current   =   string;  
  int   ch,   i   =   0,   j   =   0,   k;  
  char   *chp;  
   
  unsigned   char   *result   =   (unsigned   char   *)emalloc((length   /   4   *   3   +   1)   *   sizeof(char));  
  if   (result   ==   NULL)   {  
  return   NULL;  
  }  
   
  /*   run   through   the   whole   string,   converting   as   we   go   */  
  while   ((ch   =   *current++)   !=   '\0')   {  
  if   (ch   ==   base64_pad)   break;  
  chp   =   strchr(base64_table,   ch);  
  if   (chp   ==   NULL)   continue;  
  ch   =   chp   -   base64_table;  
   
  switch(i   %   4)   {  
  case   0:  
  result[j]   =   ch   <<   2;  
  break;  
  case   1:  
  result[j++]   |=   ch   >>   4;  
  result[j]   =   (ch   &   0x0f)   <<   4;  
  break;  
  case   2:  
  result[j++]   |=   ch   >>2;  
  result[j]   =   (ch   &   0x03)   <<   6;  
  break;  
  case   3:  
  result[j++]   |=   ch;  
  break;  
  }  
  i++;  
  }  
   
  k   =   j;  
  /*   mop   things   up   if   we   ended   on   a   boundary   */  
  if   (ch   ==   base64_pad)   {  
  switch(i   %   4)   {  
  case   0:  
  case   1:  
  efree(result);  
  return   NULL;  
  case   2:  
  k++;  
  case   3:  
  result[k++]   =   0;  
  }  
  }  
  if(ret_length)   {  
  *ret_length   =   j;  
  }  
  result[k]   =   '\0';  
  return   result;  
  }  
   
  /*   {{{   proto   string   base64_encode(string   str)  
        Encodes   string   using   MIME   base64   algorithm   */  
  void   php3_base64_encode(INTERNAL_FUNCTION_PARAMETERS)   {  
  pval   *string;  
  unsigned   char   *result;  
  int   ret_length;  
  TLS_VARS;  
   
  if   (ARG_COUNT(ht)!=1   ||   getParameters(ht,1,&string)   ==   FAILURE)   {  
  WRONG_PARAM_COUNT;  
  }  
  convert_to_string(string);  
  result   =   _php3_base64_encode(string->value.str.val,   string->value.str.len,   &ret_length);  
  if   (result   !=   NULL)   {  
  return_value->value.str.val   =   result;  
  return_value->value.str.len   =   ret_length;  
  return_value->type   =   IS_STRING;  
  }   else   {  
  RETURN_FALSE;  
  }  
  }  
  /*   }}}   */  
   
   
  /*   {{{   proto   string   base64_decode(string   str)  
        Decodes   string   using   MIME   base64   algorithm   */  
  void   php3_base64_decode(INTERNAL_FUNCTION_PARAMETERS)   {  
  pval   *string;  
  unsigned   char   *result;  
  int   ret_length;  
  TLS_VARS;  
   
  if   (ARG_COUNT(ht)!=1   ||   getParameters(ht,1,&string)   ==   FAILURE)   {  
  WRONG_PARAM_COUNT;  
  }  
  convert_to_string(string);  
  result   =   _php3_base64_decode(string->value.str.val,   string->value.str.len,   &ret_length);  
  if   (result   !=   NULL)   {  
  return_value->value.str.val   =   result;  
  return_value->value.str.len   =   ret_length;  
  return_value->type   =   IS_STRING;  
  }   else   {  
  RETURN_FALSE;  
  }  
  }  
  /*   }}}   */  
   
   
  /*  
    *   Local   variables:  
    *   tab-width:   4  
    *   c-basic-offset:   4  
    *   End:  
    */  
  Top

3 楼realdreamer(楼主英明,贫僧久仰大名,特来拜见)回复于 2002-09-22 13:35:20 得分 15

告诉你,   MS   的   VS.NET   里的   ATL   源代码里就有一个   BASE64编码解码的源代码:)  
   
   
  你在atlmfc目录下搜索一下就可以找到Top

4 楼itaolu(老罗)回复于 2002-09-22 13:49:13 得分 10

这里有Base64的中文教程和源代码:  
   
  http://laoluoc.yeah.netTop

相关问题

  • 寻找RLE编码,解码源程序和算法(高分)
  • 急!谁有MPEG4的编码,解码源程序或资料?
  • 有人有MIME编码/解码的源程序吗?谢了先!
  • 给我BASE64编码与解码的源程序,我的分全给你!
  • 求教快速图像解码源程序!
  • 有没有在windows上实现xvid解码的源程序代码?
  • MEPG4编码和解码
  • Base64 编码解码问题~~
  • 嗨~~~ 在众多下载的MP3解码源程序中, 我怎么就没法用上一个。
  • 谁有各种编码互相转换(如GB,Big5,UTF-8等)的方法(最好有源程序)?200分!

关键词

  • .net
  • 源代码
  • php
  • base64
  • current
  • license
  • decode
  • result
  • ret
  • length

得分解答快速导航

  • 帖主:yymember9
  • playguy
  • oldworm
  • realdreamer
  • itaolu

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo