我的cryptopp562有点问题(在Debian上是重要的),我有一个十六进制字符串,正试图将其转换为十进制整数。我在cryptopp中使用HexDecoder(因为我已经在项目中的其他事情上使用了cryptopp)。因为我不知道一步一步将十六进制字符串直接转换为十进制整数的方法,所以我有一个中间步骤十进制字符串。顺其自然

十六进制字符串>十进制字符串>十进制整数

但是,我的管道似乎不正确,但是我无法终生找出原因。我什至没有将十六进制字符串转换为十进制字符串,所以我的十进制int始终读为0。过去我使用Base64Encoder(和Decoder)和ZlibCompressor(和Decompressor)都没有问题,所以这是有点尴尬,因为它应该更多。

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()返回true。起初我以为是因为我错过了泵的所有参数,但是加上这些没有什么影响,仍然没有任何效果。

A similar question was asked (and answered) a year ago。答案以“阅读cryptoPP Wiki”的形式返回,但我看不出我的代码与他们的Wiki有何不同。

我忘记了什么?我知道这会很小。

最佳答案

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*/

命名您的StringSource。在更新代码中,请注意StringSource名为ss
std::string decoded;
std::string encoded = "39"; //Hex, so would be 63 in decimal
CryptoPP::StringSource ss(encoded, true /*PumpAll*/,
    new CryptoPP::HexDecoder(
        new CryptoPP::StringSink(decoded) /*StringSink*/
    )/*HexDecoder*/
);/*StringSource*/

GCC的某些版本在匿名声明方面遇到麻烦。不久前,我追踪到StringSink析构函数运行得太早(在抽取数据之前)。我想提交一份GCC错误报告,但我永远都无法将其简化为最小的案例。

您还可以执行:
std::string decoded;
std::string encoded = "39"; //Hex, so would be 63 in decimal

CryptoPP::HexDecoder decoder(new CryptoPP::StringSink(decoded));
decoder.Put(encoded.data(), encoded.size());
decoder.MessageEnd();

关于c++ - HexDecoder输出为空,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25327066/

10-10 19:42