我遇到了Crypto ++的Integer
類的一些問題。我正在使用最新版本5.6.2。整數到字符串轉換問題
我試圖整數轉換成字符串用下面的代碼:
CryptoPP::Integer i("12345678900987654321");
std::ostrstream oss;
oss << i;
std::string s(oss.str());
LOGDEBUG(oss.str()); // Pumps log to console and log file
輸出似乎有多餘的垃圾數據:
12345678900987654321.ÍÍÍÍÍÍÍÍÍÍÍýýýý««««««««îþîþ
我,當我直接輸出得到同樣的事情到控制檯:
std::cout << "Dec: " << i << std::endl; // Same result
此外,我不能得到精度或科學no工作。以下內容將輸出相同的結果:
std::cout.precision(5); // Does nothing with CryptoPP::Integer
std::cout << "Dec: " << std::setprecision(1) << std::dec << i << std::endl;
std::cout << "Sci: " << std::setprecision(5) << std::scientific << i << std::endl;
最重要的是,足夠多的數字打破了整個事情。
CryptoPP::Integer i("12345");
// Calculate i^16
for (int x = 0; x < 16; x++)
{
i *= i;
}
std::cout << i << std::endl; // Will never finish
最後我想要得到的東西,我可以用大Integer
號工作,並能輸出以科學計數法的字符串。我沒有提取Integer
庫或根據需要修改它的問題,但我寧願使用穩定的代碼。
我做錯了什麼,或者有沒有辦法讓我的工作正常?
顯示LOGDEBUG的定義。聽起來就像你在調用'printf'並傳遞從'ostrstream'返回的字符串對象而不是指向文本緩衝區的指針。由於沒有進行任何調用來強制緩衝區被空終止,因此您可能會在文本之後看到垃圾。嘗試'LOGDEBUG(oss.str()。c_str())' –
坦率地說,LOGDEBUG在這裏不是問題。正如我的帖子所指出的,std :: cout產生相同的輸出。我可以完全刪除我的Urho3D的東西(包括LOGDEBUG)和std :: cout仍然會產生相同的問題。 – Thebluefish
*「除此之外,足夠多的數字打破了整個事情」 - 是的,這是記錄的行爲。確切的大小是*絕對值小於(256 ** sizeof(word))**(256 ** sizeof(int))* *。請參閱[Integer頭文件](http://www.cryptopp.com/docs/ref/integer_8h_source.html)中的註釋。即使是密碼學,這個數字也是非常大的。也許你應該轉向一個提供通用整數的庫,如[GNU's Multiprecision Integer](https://gmplib.org/)(gmp)。 – jww