读取short的二进制文件大小从上周起停止工作 我在C++ Visual Studio 2017中有一个程序,直到上个星期为止一直运行良好。 基本上,我正在读取一个二进制文件:

读取short的二进制文件大小从上周起停止工作 我在C++ Visual Studio 2017中有一个程序,直到上个星期为止一直运行良好。 基本上,我正在读取一个二进制文件:,c++,file,binary,sizeof,C++,File,Binary,Sizeof,我尝试了几个文件,只是为了确定问题出在代码上。但在文件的安排上没有任何变化 void getImageDimension(ifstream &inFile, unsigned int(&dim)[3]) { for (int i = 0; i < 3; i++) { inFile.read((char*)&dim[i], sizeof(short)); } } 直到上周,我才得到正确的尺寸,现在我认为自从上次window

我尝试了几个文件,只是为了确定问题出在代码上。但在文件的安排上没有任何变化

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

但我得到: 3473422414432047317

有人知道问题出在哪里吗

inFile.read((char*)&dim[i], sizeof(short));
我看不太对&dim[i]是int*类型,您将其视为短*。我建议改为:

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.
}

听起来像是代码中未定义的行为。请提供。邪恶的混合类型有什么好处?你很可能把3个短整型读入3个半整型。ints中的最后2个字节将与以前保持不变-如果int是4个字节,短的是2个字节,这是非常常见的。