作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我现在正在研究 C++ 中的加密/解密方法。它需要一个 std::string
作为输入(加上一个将用于加密消息的“ key ”),并产生一个 std::string
输出表示加密后的字符串。
在加密过程中,我将 std::string
转换为 uint16_t
数组,并在加密过程中对其进行一些计算。原因很简单,因为 uint_16_t
值比 char
提供了更多的空间来通过算法加密原始值。
问题是,为了将加密的消息作为 std::string
返回,我需要以某种方式将 uint_16_t
值的数组转换为可读的东西(即是适合 char
数组而不会溢出的东西)。为此,我认为我可以使用 base64,但我发现的所有 base64 实现仅将 std::string
或 char*
作为输入(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/
我是一名优秀的程序员,十分优秀!