gpt4 book ai didi

c++ - 如何将 16 位值的数组转换为 base64?

转载 作者:行者123 更新时间:2023-11-30 04:02:35 24 4
gpt4 key购买 nike

所以我现在正在研究 C++ 中的加密/解密方法。它需要一个 std::string 作为输入(加上一个将用于加密消息的“ key ”),并产生一个 std::string 输出表示加密后的字符串。

在加密过程中,我将 std::string 转换为 uint16_t 数组,并在加密过程中对其进行一些计算。原因很简单,因为 uint_16_t 值比 char 提供了更多的空间来通过算法加密原始值。

问题是,为了将加密的消息作为 std::string 返回,我需要以某种方式将 uint_16_t 值的数组转换为可读的东西(即是适合 char 数组而不会溢出的东西)。为此,我认为我可以使用 base64,但我发现的所有 base64 实现仅将 std::stringchar* 作为输入(8 位/元素)。显然,如果我将我的 uint16_t 数组提供给它,我将永远无法取回我的原始值,因为 base64 函数在转换之前将其转换为 8 位。

所以这是我的问题:有没有人知道将 uint16_t 数组编码为可打印字符串(如 base64)并在不丢失任何数据的情况下返回的方法?

我知道我必须获取数据字节才能使用 base64,但我不确定该怎么做。

提前感谢您的帮助!

最佳答案

您可以使用 base-n迷你库,它提供通用的、基于迭代器的 I/O。

以下代码按预期将“1 2 3 4 65535”输出到标准输出:

uint16_t arr[] { 1, 2, 3, 4, 65535 };
const int len = sizeof(arr)/sizeof(arr[0]);
std::string encoded;
bn::encode_b64(arr, arr + len, std::back_inserter(encoded));
uint16_t out[len] { 0 };
bn::decode_b64(encoded.begin(), encoded.end(), out);
for (auto c : out) {
std::cout << c << " ";
}

强制披露:我是库的作者

关于c++ - 如何将 16 位值的数组转换为 base64?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25005363/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com