C++ Base64编解码使用示例
简介
Base64是一种编码方式,能够将二进制数据转化为可打印的ASCII字符,常用于邮件、XML等文本转移过程中对二进制数据进行编码。C++也提供了Base64编解码的支持,这里就进行一下说明。
Base64编码
Base64编码将三个8位的字节转换为四个6位的字节,即每3个字节将会变成4个字节,更准确的说是每满4个字节会编码成3个字节。它的编码方式如下表所示:
原始数据 | 二进制 | 编码 |
---|---|---|
A | 01000001 | Q |
B | 01000010 | g |
C | 01000011 | w |
D | 01000100 | |
E | 01000101 | |
F | 01000110 |
C++提供了Base64编码的实现函数 base64::encode()
,使用方法如下:
#include <string>
#include "base64.h"
std::string originStr("ABCDEFG");
std::string encodedStr(base64::encode(originStr));
上述代码将字符串 "ABCDEFG" 进行了Base64编码,encodedStr
存储的就是编码后的结果。
Base64解码
和Base64编码吻合,Base64解码会将四个6位的字节转换为三个8位的字节,即每4个字符将会解码为3个字节。它的解码方式如下表所示:
编码 | 二进制 | 原始数据 |
---|---|---|
Q | 01000001 | A |
g | 01000010 | B |
w | 01000011 | C |
(pad) | 00000000 |
C++提供了Base64解码的实现函数 base64::decode()
,使用方法如下:
#include <string>
#include "base64.h"
std::string encodedStr("QUJDREVGRw==");
std::string decodedStr(base64::decode(encodedStr));
上述代码将字符串 "QUJDREVGRw==" 进行了Base64解码,decodedStr
存储的就是解码后的结果。
Base64示例
以下是一个对Base64编解码的示例应用。假设要将一张图片进行Base64编码并保存,然后从保存的字符串中读取图片的数据并解码。 C++代码如下:
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include "base64.h"
const std::string FILE_PATH = "test.png";
const std::string ENCODED_FILE_PATH = "test_encoded.txt";
const std::string DECODED_FILE_PATH = "test_decoded.png";
std::vector<unsigned char> fileToVector(const std::string& path) {
std::ifstream f(path, std::ios::binary);
return std::vector<unsigned char>(std::istreambuf_iterator<char>(f),
std::istreambuf_iterator<char>());
}
int main() {
// 读取文件内容,并进行 Base64 编码
std::vector<unsigned char> fileData = fileToVector(FILE_PATH);
std::string encodedData = base64::encode(fileData);
std::ofstream encodedFile(ENCODED_FILE_PATH);
encodedFile << encodedData;
encodedFile.close();
// 从编码文件中读取编码结果,并进行 Base64 解码
std::ifstream decodedFile(ENCODED_FILE_PATH);
std::string encodedStr((std::istreambuf_iterator<char>(decodedFile)),
std::istreambuf_iterator<char>());
std::vector<unsigned char> decodedData = base64::decode(encodedStr);
decodedFile.close();
// 将解码结果保存为文件
std::ofstream decodedFileOut(DECODED_FILE_PATH, std::ios::binary);
decodedFileOut.write((const char*)decodedData.data(), decodedData.size());
decodedFileOut.close();
return 0;
}
参考了上述示例后,你也可以将其他类型的二进制文件进行Base64编解码处理,用于数据的互联互通。
结论
在 C++ 中对二进制数据进行 Base64 编解码是必不可少的一项工作,本文介绍了 C++ 中使用 Base64 的实现方法,并给出了相关的示例,希望能为大家提供帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:c++ base64编解码使用示例 - Python技术站