gpt4 book ai didi

c++ - 为什么二进制文件 I/O 在读取时会提供一些随机数据

转载 作者:太空宇宙 更新时间:2023-11-04 15:16:57 24 4
gpt4 key购买 nike

在这里我会清楚地解释我要做什么。

我有一个文本文件,前 16 个字节包含一个叫做盐的东西,接下来的 32 个字节包含一个叫做 iv 的东西。 (这些东西是和加密有关的,这里不是重点。)

below is how the text file looks like.

现在我使用下面的代码将它们读入两个字符数组以便将它们分开。

   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 进行图形用户界面设计,最后三行用于显示文本编辑的结果。

当我多次读取同一个文本文件时,它会在最后 4 或 5 个字节上提供一些随机数据。

下图显示了从同一个文本文件中获取的一些读数。

enter image description here

这里到底发生了什么事。我无法弄清楚这种奇怪行为的原因。

最佳答案

QString::fromStdString需要 std::string作为参数。因为你传递给它一个 char * ,它将被隐式转换为 std::string使用 std::string(const char*)构造函数。问题是它会寻找一个空字符作为字符串终止符。这意味着如果您读取的数据包含空字符,它将提前终止或者(很可能是这里发生的事情)它将超过您的 salt缓冲直到它在内存中找到一个随机的空字符。

在这两种情况下修复它的方法是强制它显式使用 std::string(const char*, size_type)构造函数:QString::fromStdString(std::string(salt, 16))

关于c++ - 为什么二进制文件 I/O 在读取时会提供一些随机数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30286168/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com