在这里,病态会清楚地解释我将要做什么。
我有一个文本文件,其中前16个字节包含一个称为salt的东西,接下来的32个字节包含一个称为iv的东西。(这些东西与加密有关,而在这里无关紧要。)
现在,我使用下面的代码将它们读入两个char数组中,以将它们分开。
ifstream infile ("salt.txt" , std::ios::binary );
char* salt = new char[16];
char* iv = new char[32];
infile.read(salt , 16 );
infile.seekg(16, ios::beg);
infile.read(iv, 32 );
ui->textEdit_3->append("salt : "+ QString::fromStdString(salt) );
ui->textEdit_3->append("iv : "+ QString::fromStdString(iv) + "\n\n" );
infile.close();
我使用Qt进行gui设计,最后三行用于在文本编辑中显示结果。
当我多次读取同一文本文件时,它会在最后4或5个字节上提供一些随机数据。
下图显示了来自同一文本文件的一些读数。
这到底是怎么回事。我无法弄清楚这种奇怪行为的原因。
QString::fromStdString
以astd::string
作为参数。由于您传递了a char *
,因此将std::string
使用std::string(const char*)
构造函数将其隐式转换为a 。这样做的问题是它将寻找一个空字符作为字符串终止符。这意味着,如果您读取的数据包含空字符,它将提前终止(或者很可能在这里发生的事情),它将经过salt
缓冲区,直到在内存中找到随机的空字符为止。
修复这两种情况的方法是强制其显式使用std::string(const char*, size_type)
构造函数:QString::fromStdString(std::string(salt, 16))
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句