Qt之Base64编解码

本文介绍如何使用Qt接口对数据进行Base64编解码。

1.介绍

  Base64是基于64个可打印字符来显示2进制数据,它用于传输8Bit字节代码,并在HTTP传输中广泛应用。

1.1 规则

  1. 把3个字符变成4个字符(加两位高位0,数据一次递后)。
  2. 每76个字符加一个换行符。
  3. 最后的结束符也要处理(加等于号)。

1.2 Base64对照表

插图

1.3 示例

  • 转化前:

    1
    1111110,0111111,11111100
  • 把3个字符变成4个字符(加两位高位0):

    1
    00111111,00100111,00111111,00111100
  • 翻译为十进制:

    1
    63,39,63,60
  • 与Base64对照表转译:

    1
    /,n,/,8
  • 最后得出为/n/8

2.编码

  • 接口

    1
    2
    QByteArray QByteArray::toBase64() const
    QByteArray QByteArray::toBase64(QByteArray::Base64Options options) const
  • 示例

    1
    2
    3
    QByteArray text("Hello world");
    text.toBase64();
    /* 输出: SGVsbG8gd29ybGQ= */

3.解码

  • 接口

    1
    2
    3
    [static] QByteArray QByteArray::fromBase64(const QByteArray &base64)
    [static] QByteArray QByteArray::fromBase64(const QByteArray &base64,
    QByteArray::Base64Options options)
  • 示例

    1
    2
    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.关于更多

1
https://tools.ietf.org/html/rfc2045