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

丹尼尔·威伯

在这里,病态会清楚地解释我将要做什么。

我有一个文本文件,其中前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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么许多项目不提供预编译的二进制文件?

来自分类Dev

C ++为什么读取的二进制文件跳到结尾

来自分类Dev

fread 为什么以二进制模式读取以 ff fe 开头的文件返回 1

来自分类Dev

为什么二进制数据文件比数据大?

来自分类Dev

文件I / O和二进制模式的含义

来自分类Dev

使用FILE *的二进制文件I / O

来自分类Dev

c ++从二进制文件中读取整数,缺少一些数据

来自分类Dev

为什么“ cat a.out”的输出是一些奇怪的文本,而不是二进制的?

来自分类Dev

为什么文件的位数和同一文件的二进制表示形式不同?

来自分类Dev

大块读取二进制文件

来自分类Dev

从二进制文件读取

来自分类Dev

从二进制文件读取char *

来自分类Dev

从MongoDB读取二进制文件

来自分类Dev

从二进制文件读取

来自分类Dev

读取二进制文件c

来自分类Dev

读取大型二进制文件

来自分类Dev

读取/写入二进制文件

来自分类Dev

分批读取二进制文件

来自分类Dev

从二进制文件中读取

来自分类Dev

读取整数的二进制文件

来自分类Dev

为什么从二进制文件中读取此流停止在0x1A字符处?

来自分类Dev

为什么ASAN_SYMBOLIZER_PATH不再与版本修饰的二进制文件一起使用

来自分类Dev

读取已发布的二进制文件并写入新的二进制文件

来自分类Dev

读取二进制文件会留下一些未读的字节

来自分类Dev

使用C ++读取二进制文件并翻译其中的一些内容

来自分类Dev

为什么写文件二进制方法有时返回一个字母而其他一个十六进制?

来自分类Dev

Haskell:用二进制懒惰地读取二进制文件

来自分类Dev

读取文件为二进制/十六进制

来自分类Dev

为什么我不能遍历二进制多行读取?

Related 相关文章

热门标签

归档