我想将myVar从CryptoPP:Integer
转换为char*
或转换为String:
代码如下:
CryptoPP::Integer myVar = pubKey.ApplyFunction(m);
std::cout << "result: " << std::hex << myVar<< std::endl;
我一直在互联网上搜索CryptoPP:Integer
到char*
,但我找不到运气。所以,要么将CryptoPP:Integer
转换为char*
要么全部都是问题,要么我在C ++中对CryptoPP:Integer
类型的理解不是很清楚。
有人能帮助我吗?
答案 0 :(得分:5)
使用Boost:
boost::lexical_cast<std::string>(myVar);
C ++ 98:
std::ostringstream stream;
stream << myVar;
stream.str();
答案 1 :(得分:5)
除了问题所暗示的明确支持CryptoPP::Integer
之外,我不知道更多关于<<
的一种方法是使用std::stringstream
:
std::stringstream ss;
ss << std::hex /*if required*/ << myVar;
使用std::string
提取基础std::string s = ss.str();
。然后,只要s.c_str()
在范围内,您就可以使用const char*
访问s
缓冲区。一旦调用并依赖s
的结果作为行为,并且随后依赖于该结果 undefined ,请不要以任何方式更改c_str()
。
有更简洁的C ++ 11解决方案,但这需要您(和我)更多地了解该类型。
答案 2 :(得分:2)
如果CryptoPP::Integer
可以发送到std::cout
之类的输出流(正如您的代码似乎建议的那样),那么您可以使用std::ostringstream
:
#include <sstream> // For std::ostringstream
....
std::string ToString(const CryptoPP::Integer& n)
{
// Send the CryptoPP::Integer to the output stream string
std::ostringstream os;
os << n;
// or, if required:
// os << std::hex << n;
// Convert the stream to std::string
return os.str();
}
然后,如果您有std::string
个实例,则可以使用 const char*
将其转换为std::string::c_str()
。
(但我认为在C ++代码中,你应该使用像std::string
这样的安全字符串类,而不是原始的C风格字符指针。)
<强> PS 强>
我假设CryptoPP::Integer
不是int
的普通typedef。
如果您想将int
转换为std::string
,那么您可能只想使用C ++ 11 std::to_string()
。
答案 3 :(得分:2)
根据您的需要,有几种不同的方法可以做到这一点。在这种情况下,char*
没有提供足够的信息。
以下是使用插入运算符时的结果:
byte buff[] = { 'H', 'e', 'l', 'l', 'o' };
CryptoPP::Integer n(buff, sizeof(buff));
cout << "Oct: " << std::oct << n << endl;
cout << "Dec: " << std::dec << n << endl;
cout << "Hex: " << std::hex << n << endl;
结果是:
$ ./cryptopp-test.exe
Oct: 4414533066157o
Dec: 310939249775.
Hex: 48656c6c6fh
但是,如果你想获得原始字符串&#34;你好&#34; (re:你的Raw RSA项目):
byte buff[] = { 'H', 'e', 'l', 'l', 'o' };
CryptoPP::Integer n(buff, sizeof(buff));
size_t len = n.MinEncodedSize();
string str;
str.resize(len);
n.Encode((byte *)str.data(), str.size(), Integer::UNSIGNED);
cout << "Str: " << str << endl;
结果是:
$ ./cryptopp-test.exe
Str: Hello
但是,如果您只想要Integer
中使用的字符串,那么:
Integer i("11111111111111111111");
ostringstream oss;
oss << i;
string str = oss.str();
cout << str << endl;
结果是:
$ ./cryptopp-test.exe
1111111111111111111.