新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   >>中国XML论坛<<     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> VoiceXML, CCXML, OpenVXI
    [返回] 中文XML论坛 - 专业的XML技术讨论区XML.ORG.CN讨论区 - 高级XML应用『 XML在语音技术中的应用 』 → Base64编码技术 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 21489 个阅读者浏览上一篇主题  刷新本主题   平板显示贴子 浏览下一篇主题
     * 贴子主题: Base64编码技术 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     zhu_ruixian 帅哥哟,离线,有人找我吗?射手座1983-12-2
      
      
      威望:2
      等级:大二期末(Java考了96分!)
      文章:406
      积分:3471
      门派:W3CHINA.ORG
      注册:2006/3/30

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给zhu_ruixian发送一个短消息 把zhu_ruixian加入好友 查看zhu_ruixian的个人资料 搜索zhu_ruixian在『 XML在语音技术中的应用 』 的所有贴子 引用回复这个贴子 回复这个贴子 查看zhu_ruixian的博客楼主
    发贴心情 

    在别的地方看到一份源代码,共享一下。
    typedef  unsigned long  ulong32 ;
    class Base64Data {
    public:
     
     static void encode( const unsigned char* buffer, ulong32 bufferSize, AnsiString& output, bool addLineBreak ) {
      ulong32 count = 0;
      ulong32 o = 0;
      
      output = "";
      while (count < bufferSize) {
       ulong32 remainingBytes = bufferSize - count;
       if ( addLineBreak && o && (o % 76 == 0) ) {
        output += "\n";
       }
       switch ( remainingBytes ) {
        case 1: {
         output += Base64Data::base64EncodingTable[ ((buffer[count] >> 2) & 0x3f) ];
         output += Base64Data::base64EncodingTable[ ((buffer[count] << 4) & 0x30) ];
         output += "==";
        }
        break;
        case 2: {
         output += Base64Data::base64EncodingTable[ ((buffer[count] >> 2) & 0x3f) ];
         output += Base64Data::base64EncodingTable[ ((buffer[count] << 4) & 0x30) + ((buffer[count + 1] >> 4) & 0x0f) ];
         output += Base64Data::base64EncodingTable[ ((buffer[count + 1] << 2) & 0x3c) ];
         output += "=";
        }
        break;

        default: {
         output += Base64Data::base64EncodingTable[ ((buffer[count] >> 2) & 0x3f) ];
         output += Base64Data::base64EncodingTable[ ((buffer[count] << 4) & 0x30) + ((buffer[count + 1] >> 4) & 0x0f) ];
         output += Base64Data::base64EncodingTable[ ((buffer[count + 1] << 2) & 0x3c) + ((buffer[count + 2] >> 6) & 0x03) ];
         output += Base64Data::base64EncodingTable[ (buffer[count + 2] & 0x3f) ];
        }
        break;
       }
       o += 4;
       count += 3;
      }
     }

     //calling this with a NULL buffer means that the buffer size will be returned
     static void decode(const AnsiString& input, unsigned char *buffer, ulong32& bufferSize ) {
      ulong32 index = 0;
      ulong32 count = input.size();
      ulong32 bufferIndex = 0;
      
      

      while (index < count)
      {
       while (index < count && (input[index] == 13 || input[index] == 10)) {
        index++;
       }

       if (index < count) {
        unsigned char b1 = (unsigned char)((Base64Data::base64DecodingTable[(int)input[index]] << 2 & 0xfc) +
         (Base64Data::base64DecodingTable[(int)input[index + 1]] >> 4 & 0x03));
        
        if ( buffer ) {
         buffer[bufferIndex] = b1;
        }
        
        bufferIndex++;
        if (input[index + 2] != '=')  {
         unsigned char b2 = (unsigned char)((Base64Data::base64DecodingTable[(int)input[index + 1]] << 4 & 0xf0) +
          (Base64Data::base64DecodingTable[(int)input[index + 2]] >> 2 & 0x0f));
         
         if ( buffer ) {
          buffer[bufferIndex] = b2;
         }

         bufferIndex++;
        }

        if (input[index + 3] != '=') {
         unsigned char b3 = (unsigned char)((Base64Data::base64DecodingTable[(int)input[index + 2]] << 6 & 0xc0) +
          Base64Data::base64DecodingTable[(int)input[index + 3]]);
         
         if ( buffer ) {
          buffer[bufferIndex] = b3;
         }
         
         bufferIndex++;
        }
        index += 4;
       }
      }
      bufferSize = bufferIndex;
     }

     static char* base64EncodingTable;
     static char base64DecodingTable[];
    };

    char* Base64Data::base64EncodingTable = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
    char Base64Data::base64DecodingTable[] = {
               0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
               0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
               0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  62,   0,   0,   0,  63,
              52,  53,  54,  55,  56,  57,  58,  59,  60,  61,   0,   0,   0,   0,   0,   0,
               0,   0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13,  14,
              15,  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,   0,   0,   0,   0,   0,
               0,  26,  27,  28,  29,  30,  31,  32,  33,  34,  35,  36,  37,  38,  39,  40,
              41,  42,  43,  44,  45,  46,  47,  48,  49,  50,  51,   0,   0,   0,   0,   0};
    代码没测试,我直接贴过来的。

    ----------------------------------------------
    为什么总是索取的人多,奉献的人少...

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/10/16 13:04:00
     
     GoogleAdSense射手座1983-12-2
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 XML在语音技术中的应用 』 的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/5/9 16:22:25

    本主题贴数4,分页: [1]

     *树形目录 (最近20个回帖) 顶端 
    主题:  Base64编码技术(3539字) - zhu_ruixian,2006年9月22日
        回复:  Thank you for your sharing!(27字) - siberiarabbit,2009年1月8日
        回复:  个人认为,(The Base64 Content-Transfer-Encoding is de..(530字) - equalto,2006年11月21日
        回复:  在别的地方看到一份源代码,共享一下。typedef unsigned long ulong3..(3906字) - zhu_ruixian,2006年10月16日

    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    93.750ms