【发布时间】:2020-03-17 20:51:49
【问题描述】:
我已经能够使用 boost 和以下代码将 std::vector<char> 编码为 Base64:
using namespace boost::archive::iterators;
std::string message(binary.begin(), binary.end());
std::stringstream os;
using base64_text = insert_linebreaks<base64_from_binary<transform_width<const char *, 6, 8>>, 72>;
std::copy(
base64_text(message.c_str()),
base64_text(message.c_str() + message.size()),
ostream_iterator<char>(os)
);
return os.str();
我在 Stackoverflow 上找到了这个。好吧,现在我想反过来做同样的事情,放入一个 Base64 格式的 std::string 并最终得到一个 std::vector<char>。但我不能让我的例子反过来做。我在网上找到了一些其他代码,它适用于 Hello World 示例,但是当实际更大的 Base64 还包含一些关键字符(如反斜杠)时,整个事情就会崩溃。
这就是我现在正在做的解码:
using namespace std;
using namespace boost::archive::iterators;
typedef
transform_width<
binary_from_base64<string::const_iterator>, 8, 6
> binary_t;
string dec(binary_t(str.begin()), binary_t(str.end()));
return dec;
当我要创建字符串时,它在返回前的最后一行崩溃。 你看看有什么问题吗?
【问题讨论】:
-
base64 编码字符串中的反斜杠有什么作用? | “整个事情都崩溃了”——细节?它是否由于输入无效而引发异常并且您没有捕获它?
-
根据维基百科,它是值为 63 的字符。
-
在这种情况下,你的斜线混淆了:/ 是向前的,\ 是向后的。
-
啊,当然,我的错。我的 base64 字符串中没有反斜杠,只有普通的正斜杠。
-
添加一个 try/catch 或在调试器中运行它,看看你能找出崩溃的原因。如果您可以提供minimal reproducible example,包括导致错误的示例输入,这也会很有用。