【发布时间】: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 个字节,这很常见。