Qt之Base64编解码 (***)

目录

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"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值