06
Apr
April 6, 2014 分类: ASM/C/C++     作者: hoverlees     留言: 发表

前两天发了java版的,现在把c的代码也帖出来,这个是用到我的websocket server工程中的代码。

base64.h

/**
Base64编码解码函数
@auhtor Hoverlees http://www.hoverlees.com
*/

#ifndef _BASE64_H
#define _BASE64_H

/**
 * base64编码
 * @param input 需要编码的内容
 * @param inputLen 需要编码的内容的长度
 * @param output 编码后的内容将存到该指针指向的内存,请确保内存有 inputLen*4/3的字节数
 * @return 编码后的字节长度
 */
int base64_encode(const char* input,int inputLen,char* output);


/**
 * base64解码
 * @param input 需要解码的内容
 * @param inputLen 需要解码的内容的长度
 * @param output 解码后的内容将存到该指针指向的内存,请确保内存有 inputLen*3/4的字节数
 * @return 解码后的字节长度
 */
int base64_decode(const char* input,int inputLen,char* output);

#endif


查看详细内容 »

标签:
04
Apr
April 4, 2014 分类: Java     作者: hoverlees     留言: 发表

较早的java版本没有直接提供base64编码处理的类,都是通过其他类库的附加功能实现。而对于android平台,又有自己的base64支持类,导致代码影响跨平台。所以就自己写了个base64编码处理的类,这样就可以同一套代码运行在android平台和se平台了。
代码如下:

package com.hoverlees.utils;

/**
 * @author hoverlees http://www.hoverlees.com
 * RFC 4648
 */
public class Base64 {
	private static char[] base64Table="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".toCharArray();
	private static byte[] base64TableMap=createTableMap();
	private static byte[] createTableMap() {
		byte[] table=new byte[256];
		for(int i=0;i<256;i++) table[i]=-1;
		for(int i=0;i<base64Table.length;i++){
			table[base64Table[i]]=(byte)i;
		}
		return table;
	}
	/**
	 * Base64编码,将字节数组转换成base64字符串
	 * @param data 字节数据
	 * @return base64编码的字符串
	 */
	public static String encode(byte[] data){
		StringBuffer s=new StringBuffer();
		int state=0;
		int pos=0;
		for(int i=0;i<data.length;i++){
			switch(pos){
			case 0:
				state=(data[i]&0xFC)>>2;
				s.append(base64Table[state]);
				state=(data[i]&0x3)<<4;
				pos=1;
				break;
			case 1:
				state|=((data[i]&0xF0)>>4);
				s.append(base64Table[state]);
				state=(data[i]&0xF)<<2;
				pos=2;
				break;
			case 2:
				state|=((data[i]&0xC0)>>6);
				s.append(base64Table[state]);
				state=data[i]&0x3F;
				s.append(base64Table[state]);
				pos=0;
				break;
			}
		}
		if(pos==1){
			s.append(base64Table[state]);
			s.append("==");
		}
		else if(pos==2){
			s.append(base64Table[state]);
			s.append("=");
		}
		return s.toString();
	}
	/**
	 * Base64解码,将base64字符串转换成字节数组
	 * @param data base64的字符串
	 * @return 解码后的字节数组
	 */
    public static byte[] decode(String data){
        byte[] bytes=data.getBytes();
        int n=0;
        int pos=0;
        byte cchar,t;
        for(int i=0;i<bytes.length;i++){
            cchar=bytes[i];
            t=base64TableMap[cchar];
            if(cchar=='=') break;
            switch(pos){
            case 0:
                bytes[n]=(byte)(t<<2);
                pos=1;
                break;
            case 1:
                bytes[n]=(byte)(bytes[n]|((t&0x30)>>4));
                n++;
                bytes[n]=(byte)((t&0xf)<<4);
                pos=2;
                break;
            case 2:
                bytes[n]=(byte)(bytes[n]|((t&0x3c)>>2));
                n++;
                bytes[n]=(byte)((t&0x3)<<6);
                pos=3;
                break;
            case 3:
                bytes[n]=(byte)(bytes[n]|t);
                n++;
                pos=0;
                break;
            }
        }
        byte[] r=new byte[n];
        for(int i=0;i<n;i++) r[i]=bytes[i];
        return r;
    }
}

标签:
快速链接
推荐标签
最新图片
较新文章
随机推荐
友情链接