网络传输经常用base64编码的数据,因此我们需要将其解码成正常字符集合。

  base64.h

 #ifdef  __cplusplus
extern "C" {
#endif char * base64_encode( const unsigned char * bindata, char * base64, int binlength );
int base64_decode( const char * base64, unsigned char * bindata ); #ifdef __cplusplus
}
#endif

  base64.c

 #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "base64.h" #ifndef MAX_PATH
#define MAX_PATH 256
#endif const char * base64char = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; char * base64_encode( const unsigned char * bindata, char * base64, int binlength )
{
int i, j;
unsigned char current; for ( i = , j = ; i < binlength ; i += )
{
current = (bindata[i] >> ) ;
current &= (unsigned char)0x3F;
base64[j++] = base64char[(int)current]; current = ( (unsigned char)(bindata[i] << ) ) & ( (unsigned char)0x30 ) ;
if ( i + >= binlength )
{
base64[j++] = base64char[(int)current];
base64[j++] = '=';
base64[j++] = '=';
break;
}
current |= ( (unsigned char)(bindata[i+] >> ) ) & ( (unsigned char) 0x0F );
base64[j++] = base64char[(int)current]; current = ( (unsigned char)(bindata[i+] << ) ) & ( (unsigned char)0x3C ) ;
if ( i + >= binlength )
{
base64[j++] = base64char[(int)current];
base64[j++] = '=';
break;
}
current |= ( (unsigned char)(bindata[i+] >> ) ) & ( (unsigned char) 0x03 );
base64[j++] = base64char[(int)current]; current = ( (unsigned char)bindata[i+] ) & ( (unsigned char)0x3F ) ;
base64[j++] = base64char[(int)current];
}
base64[j] = '\0';
return base64;
} int base64_decode( const char * base64, unsigned char * bindata )
{
int i, j;
unsigned char k;
unsigned char temp[];
for ( i = , j = ; base64[i] != '\0' ; i += )
{
memset( temp, 0xFF, sizeof(temp) );
for ( k = ; k < ; k ++ )
{
if ( base64char[k] == base64[i] )
temp[]= k;
}
for ( k = ; k < ; k ++ )
{
if ( base64char[k] == base64[i+] )
temp[]= k;
}
for ( k = ; k < ; k ++ )
{
if ( base64char[k] == base64[i+] )
temp[]= k;
}
for ( k = ; k < ; k ++ )
{
if ( base64char[k] == base64[i+] )
temp[]= k;
} bindata[j++] = ((unsigned char)(((unsigned char)(temp[] << ))&0xFC)) |
((unsigned char)((unsigned char)(temp[]>>)&0x03));
if ( base64[i+] == '=' )
break; bindata[j++] = ((unsigned char)(((unsigned char)(temp[] << ))&0xF0)) |
((unsigned char)((unsigned char)(temp[]>>)&0x0F));
if ( base64[i+] == '=' )
break; bindata[j++] = ((unsigned char)(((unsigned char)(temp[] << ))&0xF0)) |
((unsigned char)(temp[]&0x3F));
}
return j;
}

base64解码的更多相关文章

  1. C# Base64解码 二进制输出

    具体的:Base64编码解码还需要学习 /// <summary> /// base64 解码Excel下载 /// </summary> /// <param name ...

  2. 微信小程序之图片base64解码

    不知道大家在做微信小程序的时候遇到base64解码的问题,我之前在做微信小程序的时候遇到base64解析图片一直有问题,所以在这里把遇到的问题和解决方案在这里记录一下: 在平时的项目中我们是直接用ba ...

  3. 将图片文件转化为字节数组字符串,并对其进行Base64编码处理,以及对字节数组字符串进行Base64解码并生成图片

    实际开发中涉及图片上传并且量比较大的时候一般处理方式有三种 1.直接保存到项目中 最老土直接方法,也是最不适用的方法,量大对后期部署很不方便 2.直接保存到指定路径的服务器上.需要时候在获取,这种方式 ...

  4. SqlServer Base64解码中文

    最近在做一个和拥有TurboCRM相关的项目,其中需要取出客户信息的联系人字段,经过查看,这个字段在存入时用Base64加密过了 这个功能在应用层实现是很方便的,但是由于一些特殊原因,只能放到SqlS ...

  5. python3 base64解码出现TypeError:Incorrect padding

    今天在解决爬虫对加密参数的分析时,需要使用到base64解码.但是过程中出现了TypeError:Incorrect padding的错误提示.以下是解决方法,以便查阅. 其实正常使用base64是不 ...

  6. 【java工具类】对字节数组字符串进行Base64解码并生成图片

    import java.io.File;import java.io.FileOutputStream;import java.io.OutputStream;import org.springfra ...

  7. erlang的base64解码问题

    在收到客户端的数字签名signature后,需要对signature做base64的解码.代码如下所示: validate(SignedRequest) -> RequestParts = st ...

  8. bootstrap-wysiwyg 结合 base64 解码 .net bbs 图片操作类 (二) 图片裁剪

    图片裁剪参见: http://deepliquid.com/projects/Jcrop/demos.php?demo=thumbnail        一个js插件 http://www.mikes ...

  9. bootstrap-wysiwyg 结合 base64 解码 .net bbs 图片操作类

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Dr ...

随机推荐

  1. Python3 解压序列

    一 普遍情况: x,y,z = 1,2,3 print("x:",x) # x:1 print("y:",y) # y:2 print("z:&quo ...

  2. preg_replace 以及弃用的e

    preg_replace (PHP 4, PHP 5) preg_replace — 执行一个正则表达式的搜索和替换 说明¶ mixed preg_replace ( mixed $pattern , ...

  3. redis 常用命令 结合php

    这篇文章主要介绍了30个php操作redis常用方法代码例子,本文其实不止30个方法,可以操作string类型.list类型和set类型的数据,需要的朋友可以参考下     redis的操作很多的,以 ...

  4. 软件工程 - 第二十次作业 Alpha 事后诸葛亮(团队)

    Alpha 事后诸葛亮(团队) 组长本次作业链接:https://www.cnblogs.com/dawnduck/p/10056026.html 现代软件工程 项目Postmortem 设想和目标 ...

  5. TCP系列47—拥塞控制—10、FACK下的快速恢复与PRR

    一.概述 FACK下的重传我们在之前的重传部分已经进行了介绍,这里简单介绍一下随着FACK提出的拥塞控制算法的改进及随后的进一步改进. 从我们之前介绍的RFC2582和RFC5681中可以看到,快速恢 ...

  6. jdbc 6.0

    1.获取数据库自动生成的键值 package com.rong.jielong; import java.sql.Connection; import java.sql.DriverManager; ...

  7. 【第五周】alpha发布之小组评论

    对于昨天的阿尔法发布,有那么几点需要说一下: 1,对这次阿尔法发布的过程,我们组还是基本顺利的,由于之前吃过亏,这次我提前试用了一下投影仪,做了些调试,之后的发布过程起码设备上是正常的. 2,我们的项 ...

  8. 【Linux笔记】CentOS&RHEL YUM基础知识

    以下内容收集自网络,以作参考. 一.YUM是什么 YUM = Yellow dog Updater, Modified. 主要功能是更方便的添加/删除/更新RPM包. 它能自动解决包的倚赖性问题. 它 ...

  9. HDU4258_Covered Walkway

    题目是一个很典型的斜率优化的题目.题意就不说了. 是这样的,对于双端优先队列,我们共有队首和队尾两个删除操作,来保证对于任意一个i,第一个元素都是最优的. 我们把dp的转移方程列出来就直达其状态为f[ ...

  10. Arrays.toString 如果传入的是对象 那么调用的是此对象的toString

    Arrays.toString(Object[] obj) 如果传入参数的是对象 那么调用的是此对象的toString