java base64编码 c 解码,C版的base64编码解码函数

前两天发了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

base64.c

#include "base64.h"

static const char* base64Table="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

static const char base64TableMap[]={\

-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,\

-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,\

-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,62,-1,-1,-1,63,\

52,53,54,55,56,57,58,59,60,61,-1,-1,-1,-1,-1,-1,\

-1,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,-1,-1,-1,-1,-1,-1,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,-1,-1,-1,-1,-1,-1,-1,-1,\

-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,\

-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,\

-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,\

-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,\

-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,\

-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,\

-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,\

-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};

int base64_encode(const char* input,int inputLen,char* output){

int i,n,state,pos;

n=state=pos=0;

for(i=0;i

switch(pos){

case 0:

state=(input[i]&0xFC)>>2;

output[n++]=base64Table[state];

state=(input[i]&0x3)<<4;

pos=1;

break;

case 1:

state|=((input[i]&0xF0)>>4);

output[n++]=base64Table[state];

state=(input[i]&0xF)<<2;

pos=2;

break;

case 2:

state|=((input[i]&0xC0)>>6);

output[n++]=base64Table[state];

state=input[i]&0x3F;

output[n++]=base64Table[state];

pos=0;

break;

}

}

if(pos==1){

output[n++]=base64Table[state];

output[n++]='=';

output[n++]='=';

}

else if(pos==2){

output[n++]=base64Table[state];

output[n++]='=';

}

return n;

}

int base64_decode(const char* input,int inputLen,char* output){

int pos,i,n;

char cch,t;

n=pos=0;

for(i=0;i

cch=input[i];

t=base64TableMap[cch];

if(cch=='=') break;

switch(pos){

case 0:

output[n]=(t<<2)&0xff;

pos=1;

break;

case 1:

output[n]=(output[n]|((t&0x30)>>4))&0xff;

n++;

output[n]=((t&0xf)<<4)&0xff;

pos=2;

break;

case 2:

output[n]=(output[n]|((t&0x3c)>>2))&0xff;

n++;

output[n]=((t&0x3)<<6)&0xff;

pos=3;

break;

case 3:

output[n]=(output[n]|t)&0xff;

n++;

pos=0;

break;

}

}

return n;

}

测试代码

#include "base64.h"

#include

void main(int argc,char* argv[]){

char buffer1[1024];

char buffer2[1024];

int n;

const char* s="Hello Hoverlees!";

n=base64_encode(s,strlen(s),buffer1);

buffer1[n]=0;

printf("[%d] %s\n",n,buffer1);

n=base64_decode(buffer1,n,buffer2);

buffer2[n]=0;

printf("[%d] %s\n",n,buffer2);

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值