【问题标题】:read binary file size of short stopped working since last week读取自上周以来 short 的二进制文件大小停止工作
【发布时间】:2020-01-17 13:28:06
【问题描述】:

我有一个 C++ 程序(Visual Studio 2017)直到上周都运行良好。 基本上,我正在读取一个二进制文件:

我尝试了几个文件,以确保问题出在代码上。但是在文件的排列上没有任何改变。

void getImageDimension(ifstream &inFile, unsigned int(&dim)[3]) {
    for (int i = 0; i < 3; i++) {   
        inFile.read((char*)&dim[i], sizeof(short));
    }   
}

直到上周,获得了正确的尺寸,现在(我认为自上次 Windows 更新以来),它无法正确读取文件。我尝试了几个文件,所以问题似乎是代码。

我应该得到尺寸
144 144 256

但我得到:
34734224 144 32047317

有人知道可能是什么问题吗?

【问题讨论】:

  • 听起来像是代码中某处的未定义行为。请提供minimal reproducible example
  • 类型的邪恶混合有什么用?您很可能将 3 个 short 读入 3 个一半 ints。 ints 中的最后 2 个字节将与之前保持不变 - 如果您的 int 是 4 个字节,而您的 short 是 2 个字节,这很常见。

标签: c++ file binary sizeof


【解决方案1】:
inFile.read((char*)&dim[i], sizeof(short));

我觉得不合适。 &amp;dim[i] 属于 int* 类型,您将其视为 short*。我建议将其更改为:

short temp;
inFile.read((char*)&temp, sizeof(short));
if ( inFile )
{
   // Reading into temp was successful. Use it.
   dim[i] = temp;
}
else
{
   // Do something with the error.
}

【讨论】:

    猜你喜欢
    • 2016-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多