【发布时间】:2014-10-09 05:27:24
【问题描述】:
我对 cryptopp562 有一点问题(在 Debian 上重要的是)我有一个十六进制字符串,并试图将其转换为十进制整数。我在cryptopp中使用HexDecoder(因为我已经在项目中使用cryptopp来处理其他事情)。由于我不知道一步一步从十六进制字符串直接转到十进制整数的方法,因此我有一个十进制字符串的中间步骤。就这样
十六进制字符串 > 十进制字符串 > 十进制整数
但是我的管道似乎不正确,但我终其一生都无法弄清楚原因。我什至没有正确地将十六进制字符串转换为十进制字符串位,所以我的十进制整数只是不断读取 0。我过去使用过 Base64Encoder(和解码器)和 ZlibCompressor(和解压缩器)没有问题,所以这是有点尴尬,因为应该差不多。
std::string RecoveredDecimalString;
std::string RecoveredHex = "39"; //Hex, so would be 63 in decimal
CryptoPP::StringSource (RecoveredHex, true /*PumpAll*/,
new CryptoPP::HexDecoder(
new CryptoPP::StringSink(RecoveredDecimalString) /*StringSink*/
)/*HexDecoder*/
);/*StringSource*/
但是就像我说的,在运行之后,RecoveredDecimalString.empty() 返回真。起初我以为是因为我错过了泵的所有参数,但添加它没有任何区别,仍然没有任何流动。
A similar question was asked (and answered) a year ago。答案是“阅读 cryptoPP wiki”,但我看不出我的代码与他们 wiki 上的代码有何不同。
我忘记了什么?我知道这将是非常小的东西。
【问题讨论】:
-
在不了解 CryptoC++ 的情况下,只构造了一个 (temporary)
CryptoPP::StringSource对象。您不需要执行一些操作(即调用一些成员函数)来实际进行转换吗? -
我不需要对 CryptoPP 的其他部分这样做,但我想我还是会尝试你的建议,但不幸的是,
CryptoPP::StringSource HexSource(RecoveredHex, true /*PumpAll*/, new CryptoPP::HexDecoder(new CryptoPP::StringSink(RecoveredDecimalString)));仍然产生了空输出。 -
“阅读 cryptoPP wiki” - 我没有这么说;我提供了一个来自 wiki 的工作示例(我还编写了 wiki 示例)。