我会清楚地解释我要做什么.
我有一个文本文件,前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();
Run Code Online (Sandbox Code Playgroud)
我使用Qt进行gui设计,最后三行用于在文本编辑中显示结果.
当我多次读取同一文本文件时,它会在最后4或5个字节上提供一些随机数据.
下图显示了从同一文本文件中获取的一些读数.

这件事真的发生在这里.我无法弄清楚这种奇怪行为的原因.
QString::fromStdString以a std::string为参数.由于您传递它char *,它将std::string使用std::string(const char*)构造函数隐式转换为a .问题是它会查找一个空字符作为字符串终止符.这意味着如果您读取的数据包含空字符,它将提前终止或(很可能是此处发生的情况)它将超过您的salt缓冲区,直到它在内存中找到随机空字符.
在任何一种情况下修复它的方法是强制它显式使用std::string(const char*, size_type)构造函数:QString::fromStdString(std::string(salt, 16))
| 归档时间: |
|
| 查看次数: |
201 次 |
| 最近记录: |