与Web交互可用的图片Base64编码
#ifndef ___BASE64_H___
#define ___BASE64_H___ #include <string> using namespace std; class CBase64
{
public:
CBase64();
~CBase64(); /*********************************************************
* 函数说明:将输入数据进行base64编码
* 参数说明:[in]pIn 需要进行编码的数据
[in]uInLen 输入参数的字节数
[out]strOut 输出的进行base64编码之后的字符串
* 返回值 :true处理成功,false失败
**********************************************************/
bool static Encode(const unsigned char *pIn, unsigned long uInLen, string& strOut); /*********************************************************
* 函数说明:将输入数据进行base64编码
* 参数说明:[in]pIn 需要进行编码的数据
[in]uInLen 输入参数的字节数
[out]pOut 输出的进行base64编码之后的字符串
[out]uOutLen 输出的进行base64编码之后的字符串长度
* 返回值 :true处理成功,false失败
**********************************************************/
bool static Encode(const unsigned char *pIn, unsigned long uInLen, unsigned char *pOut, unsigned long *uOutLen); /*********************************************************
* 函数说明:将输入数据进行base64解码
* 参数说明:[in]strIn 需要进行解码的数据
[out]pOut 输出解码之后的节数数据
[out]uOutLen 输出的解码之后的字节数长度
* 返回值 :true处理成功,false失败
**********************************************************/
bool static Decode(const string& strIn, unsigned char *pOut, unsigned long *uOutLen) ; /*********************************************************
* 函数说明:将输入数据进行base64解码
* 参数说明:[in]strIn 需要进行解码的数据
[out]pOut 输出解码之后的节数数据
[out]uOutLen 输出的解码之后的字节数长度
* 返回值 :true处理成功,false失败
**********************************************************/
bool static Decode(const unsigned char *pIn, unsigned long uInLen, unsigned char *pOut, unsigned long *uOutLen) ;
}; #endif // ___BASE64_H___
#include "stdafx.h" /*
*
*Base64?
*
*
*
*/ #include "Base64.h" static const char *g_pCodes =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; static const unsigned char g_pMap[] =
{
, , , , , , , , , , , ,
, , , , , , , , , , , ,
, , , , , , , , , , , ,
, , , , , , , , , , , ,
, , , , , , , , , , , ,
, , , , , , , , , , , ,
, , , , , , , , , , , ,
, , , , , , , , , , , ,
, , , , , , , , , , , ,
, , , , , , , , , , , ,
, , , , , , , , , , , ,
, , , , , , , , , , , ,
, , , , , , , , , , , ,
, , , , , , , , , , , ,
, , , , , , , , , , , ,
, , , , , , , , , , , ,
, , , , , , , , , , , ,
, , , , , , , , , , , ,
, , , , , , , , , , , ,
, , , , , , , , , , , ,
, , , , , , , , , , , ,
, , ,
}; CBase64::CBase64()
{
} CBase64::~CBase64()
{
} bool CBase64::Encode(const unsigned char *pIn, unsigned long uInLen, unsigned char *pOut, unsigned long *uOutLen)
{
unsigned long i, len2, leven;
unsigned char *p; if(pOut == NULL || *uOutLen == )
return false; //ASSERT((pIn != NULL) && (uInLen != 0) && (pOut != NULL) && (uOutLen != NULL)); len2 = ((uInLen + ) / ) << ;
if((*uOutLen) < (len2 + )) return false; p = pOut;
leven = * (uInLen / );
for(i = ; i < leven; i += )
{
*p++ = g_pCodes[pIn[] >> ];
*p++ = g_pCodes[((pIn[] & ) << ) + (pIn[] >> )];
*p++ = g_pCodes[((pIn[] & 0xf) << ) + (pIn[] >> )];
*p++ = g_pCodes[pIn[] & 0x3f];
pIn += ;
} if (i < uInLen)
{
unsigned char a = pIn[];
unsigned char b = ((i + ) < uInLen) ? pIn[] : ;
unsigned char c = ; *p++ = g_pCodes[a >> ];
*p++ = g_pCodes[((a & ) << ) + (b >> )];
*p++ = ((i + ) < uInLen) ? g_pCodes[((b & 0xf) << ) + (c >> )] : '=';
*p++ = '=';
} *p = ; // Append NULL byte
*uOutLen = p - pOut;
return true;
} bool CBase64::Encode(const unsigned char *pIn, unsigned long uInLen, string& strOut)
{
unsigned long i, len2, leven;
strOut = ""; //ASSERT((pIn != NULL) && (uInLen != 0) && (pOut != NULL) && (uOutLen != NULL)); len2 = ((uInLen + ) / ) << ;
//if((*uOutLen) < (len2 + 1)) return false; //p = pOut;
leven = * (uInLen / );
for(i = ; i < leven; i += )
{
strOut += g_pCodes[pIn[] >> ];
strOut += g_pCodes[((pIn[] & ) << ) + (pIn[] >> )];
strOut += g_pCodes[((pIn[] & 0xf) << ) + (pIn[] >> )];
strOut += g_pCodes[pIn[] & 0x3f];
pIn += ;
} if (i < uInLen)
{
unsigned char a = pIn[];
unsigned char b = ((i + ) < uInLen) ? pIn[] : ;
unsigned char c = ; strOut += g_pCodes[a >> ];
strOut += g_pCodes[((a & ) << ) + (b >> )];
strOut += ((i + ) < uInLen) ? g_pCodes[((b & 0xf) << ) + (c >> )] : '=';
strOut += '=';
} //*p = 0; // Append NULL byte
//*uOutLen = p - pOut;
return true;
} bool CBase64::Decode(const string& strIn, unsigned char *pOut, unsigned long *uOutLen)
{
unsigned long t, x, y, z;
unsigned char c;
unsigned long g = ; //ASSERT((pIn != NULL) && (uInLen != 0) && (pOut != NULL) && (uOutLen != NULL)); for(x = y = z = t = ; x < strIn.length(); x++)
{
c = g_pMap[strIn[x]];
if(c == ) continue;
if(c == ) { c = ; g--; } t = (t << ) | c; if(++y == )
{
if((z + g) > *uOutLen) { return false; } // Buffer overflow
pOut[z++] = (unsigned char)((t>>)&);
if(g > ) pOut[z++] = (unsigned char)((t>>)&);
if(g > ) pOut[z++] = (unsigned char)(t&);
y = t = ;
}
} *uOutLen = z;
return true;
}
与Web交互可用的图片Base64编码的更多相关文章
- 对JSON传递图片Base64编码的一点总结
项目中跟Java对接的时候需要传输图片,经过Base64编码后传输的. 但是实际调试的时候发现Java那边始终无法正常解析出图片. 冷静想想之后,发现问题在于使用OpenCV读取图片,编码的是Mat: ...
- [转]玩转图片Base64编码
转自:[前端攻略]:玩转图片Base64编码 图片处理在前端工作中可谓占据了很重要的一壁江山.而图片的 base64 编码可能相对一些人而言比较陌生,本文不是从纯技术的角度去讨论图片的 base64 ...
- 在线图片base64编码
图片Base64编码https://oktools.net/image2base64 在线工具https://oktools.net JSON格式化https://oktools.net/json U ...
- 图片base64编码解码
1.图片base64编码 https://c.runoob.com/front-end/59 2.图片base64解码 https://www.it399.com/image/base64 https ...
- 【前端攻略】:玩转图片Base64编码
引言 图片处理在前端工作中可谓占据了很重要的一壁江山.而图片的 base64 编码可能相对一些人而言比较陌生,本文不是从纯技术的角度去讨论图片的 base64 编码.标题略大,不过只是希望通过一些浅显 ...
- 玩转图片Base64编码
什么是 base64 编码? 图片的 base64 编码就是可以将一副图片数据编码成一串字符串,使用该字符串代替图像地址. 这样做有什么意义呢?我们知道,我们所看到的网页上的每一个图片,都是需要消耗一 ...
- 【前端攻略】:玩转图片Base64编码(转)
引言 图片处理在前端工作中可谓占据了很重要的一壁江山.而图片的Base64编码可能相对一些人而言比较陌生,本文不是从纯技术的角度去讨论图片的base64编码.标题略大,不过只是希望通过一些浅显的论述, ...
- 《转》玩转图片Base64编码
引言 图片处理在前端工作中可谓占据了很重要的一壁江山.而图片的 base64 编码可能相对一些人而言比较陌生,本文不是从纯技术的角度去讨论图片的 base64 编码.标题略大,不过只是希望通过一些浅显 ...
- 图片Base64编码
我们经常在做Jquery插件的时候需要插入一些自定义的控件,比如说按钮,而我们自己又觉着button标签很丑,而且不同浏览器显示的效果还不一样,这个时候我们需要用到图片,当然,我们可以通过img标签添 ...
随机推荐
- LeetCode题解之Valid Triangle Number
1.题目描述 2.问题分析 暴力计算 3.代码 int triangleNumber(vector<int>& nums) { ; ) return res; ; i < n ...
- python 之socket
socket,它最初做为BSD UNIX的进程通信机制,通常被称做"套接字",如今已经成为windows和mac等其它操作系统所共同遵守的网络编程标准. socket使用ip+端口 ...
- lock 相关
lock基本思路: volitile + CAS +Queue(存放线程) 实现了: 1 可见性(volitile 和 happenedBefor原则共同实现) 与 2 原子性(CAS , ...
- 关于npm run build打包后css样式中的图片失效的问题(如background)
平时run dev都能正常显示的css背景图片在npm run build打包后竟然不显示了(写在标签对中的图片都可以正常显示),而且dist/static/img目录下是确实有这张图片的,于是查看打 ...
- Web Api跨域访问配置及调用示例
1.Web Api跨域访问配置. 在Web.config中的system.webServer内添加以下代码: <httpProtocol> <customHeaders> &l ...
- 高通LCD的pwm背光驱动
发生异常的现象: msm8953 lcd在快速亮灭的情况下背光概率性休眠不灭:测量高通pwm,发现正常的时候pwm的管脚LCM_BL_PWM为低电平,失败的时候为高电平: 根据原理图: mpp是什么? ...
- 监控文件内容变化,即时写入到新文件(tail)
监控文件a,如有新内容写入,即时将新内容写入到新文件aa中: fw=open('e:\\aa.txt','ab') with open('e:\\a.txt','rb') as fo: while T ...
- 【转】Java学习---Java的锁和Mysql的锁机制
[原文]https://www.toutiao.com/i6593861446428262916/ Java和数据库的锁机制 https://www.toutiao.com/i659386144642 ...
- DLL动态链接库导出函数方法 -- 动态导出(.def文件导出)
简介 动态链接库最大的优势在于可以提供给其他应用程序共享的资源,最小化应用程序代码的复杂度,其中一个十分重要的功能就是dll可以导出封装函数的功能.导出函数有两种主要方式,分别是静态导入和动态导入,本 ...
- 解决:Host xxx.xxx.xxx.xxx is blocked because of many connection errors.
Host "xxx.xxx.xxx.xxx" is blocked because of many connection errors 1.原因:当使用错误的密码连接mysql时, ...