目录
Qt中base64基础的应用 (***)
Qt之Base64编解码
Qt 中十六进制字节流转换为Base64编码
---------------------------------------------------------------
1. 基数符号
26个大写字母 +26个小写字母 +10个数字 + 2个(“+”和“/”) == 64 个基数计数符号
2. base64的简单算法描述
把3个8位字节(38=24)转化为4个6位的字节(46=24)
在6位的前面补两个0,形成8位一个字节的形式
如果剩下的字符不足3个字节,则用0填充,输出字符使用’=’,因此编码后输出的文
本末尾可能会出现1或2个’=’, 表示补了多少字节,解码的时候,会自动去掉。
====================================
Qt中base64基础的应用 (***)
文章目录
什么是base64
为什么要用base64编码
base64的作用
base64的简单算法描述
Qt中使用base64
什么是base64
Base64是一种用 64个字符来表示 任意二进制数据的方法(就像ASCII码一样,是一种数据标准)
[‘A’, ‘B’, …‘Z’, ‘a’, ‘b’, …‘z’, ‘0’, ‘1’, …‘9’, ‘+’, ‘/’]
小结:
大写26个字母 +小写26个字母 +10个数字 +“加(+)号” +“/”号
52 +10 =62 +2
为什么要用base64编码
在网络上交换数据时,比如说从A地传到B地,往往要经过多个路由设备,由于不同
的设备对字符的处理方式有一些不同,这样那些不可见字符就有可能被处理错误,
这是不利于传输的。
把数据先做一个Base64编码,统统变成可见字符,这样出错的可能性就大降低了
很多场景下的数据传输要求数据只能由简单通用的字符组成,比如HTTP协议要求请
求的首行和请求头都必须是ASCII编码
base64的作用
所有的二进制文件,都可以因此转化为可打印的文本编码,使用文本软件进行编辑
能够对文本进行简单的加密
base64的简单算法描述
把3个8位字节(38=24)转化为4个6位的字节(46=24)
在6位的前面补两个0,形成8位一个字节的形式
如果剩下的字符不足3个字节,则用0填充,输出字符使用’=’,因此编码后输出的文
本末尾可能会出现1或2个’=’, 表示补了多少字节,解码的时候,会自动去掉。
Qt中使用base64
// base64
// 编码
QByteArray base = "你好, 世界";
base = base.toBase64();
qDebug() << base;
// 解码
base= QByteArray::fromBase64(base);
qDebug() << base.data();
————————————————
版权声明:本文为CSDN博主「杨 戬」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_45525272/article/details/107882328
Qt之Base64编解码
1.介绍
Base64是基于64个可打印字符来显示2进制数据,它用于传输8Bit字节代码,并在HTTP传输中广泛应用。
1.1 规则
把3个字符变成4个字符(加两位高位0,数据一次递后)。
每76个字符加一个换行符。
最后的结束符也要处理(加等于号)。
1.2 Base64对照表
1.3 示例
转化前:
1111110,0111111,11111100
把3个字符变成4个字符(加两位高位0):
00111111,00100111,00111111,00111100
翻译为十进制:
63,39,63,60
与Base64对照表转译:
/,n,/,8
最后得出为/n/8
2.编码
接口:
QByteArray QByteArray::toBase64() const
QByteArray QByteArray::toBase64(QByteArray::Base64Options options) const
示例:
QByteArray text("Hello world");
text.toBase64();
/* 输出: SGVsbG8gd29ybGQ= */
3.解码
接口:
[static] QByteArray QByteArray::fromBase64(const QByteArray &base64)
[static] QByteArray QByteArray::fromBase64(const QByteArray &base64,
QByteArray::Base64Options options)
示例:
QByteArray::fromBase64("SGVsbG8gd29ybGQ=");
/* 输出: Hello world */
4.关于枚举Base64Options
Base64Options枚举值一览表
Base64Options 含义
Base64Encoding (默认)常规Base64字母表,简称“Base64”
Base64UrlEncoding 与常规Base64不同的是将
“+”和“/”分别改成了“-”和“_”,
对url更友好
KeepTrailingEquals (默认)保持编码数据末尾后填充等号,
数据的大小总是4的倍数。
OmitTrailingEquals 省略编码数据末尾的等号
对照示例:
toBase64(Base64Options ) Hello world?!
Base64Encoding SGVsbG8gd29ybGQ/IQ==
Base64Encoding | OmitTrailingEquals SGVsbG8gd29ybGQ/IQ
Base64UrlEncoding SGVsbG8gd29ybGQ_IQ==
Base64UrlEncoding | OmitTrailingEquals SGVsbG8gd29ybGQ_IQ
5.关于更多
https://tools.ietf.org/html/rfc2045
————————————————
版权声明:本文为CSDN博主「Qt君」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/nicai_xiaoqinxi/article/details/98890480
Qt 中十六进制字节流转换为Base64编码
在Qt中,在网络通信时,有时需要将16进制字节流转换为Base64编码传输,在Qt的QByteArray类中,提供了与Base64转换的接口:
//16进制字节流转为Base64
QByteArray toBase64(Base64Options options) const;
QByteArray toBase64() const; // ### Qt6 merge with previous
//Base64转为16进制字节流
static QByteArray fromBase64(const QByteArray &base64, Base64Options options);
static QByteArray fromBase64(const QByteArray &base64); // ### Qt6 merge with previous
测试代码如下:
#include <QCoreApplication>
#include <QCryptographicHash>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
char hexData[10]={0x1, 0x2, 0x3,0x4, 0x5,0x6,0x7,0x8,0x9,0xa};
QByteArray data = QByteArray(hexData, 10);
//hex数据转换为base64编码,转换后赋值给base64Str
QString base64Str = data.toBase64();
//QByteArray::toHex(); //是将十六进制数据,按照其字面值转换为字符串,比如: 0x12-->0x31 0x32,以字符串输出时就是“12”
qDebug()<<"hexData: "<<data.toHex()<<", base64: "<<base64Str;
QByteArray decBase64 = QByteArray::fromBase64(QString(base64Str).toLatin1());
qDebug()<<"hexData: "<<decBase64;
return a.exec();
}
执行结果:
hexData: "0102030405060708090a" , base64: "AQIDBAUGBwgJCg=="
hexData: "0102030405060708090a"