我正在编写一个函数来读取包含一些转储数据(1 字节值的序列)的文件。由于每个转储值都是 1 个字节,所以我将它们读取为字符。我以二进制模式打开文件,以字符形式读取数据并转换为 int(因此我得到了 ascii 代码)。但是读取的数据不正确(在十六进制编辑器中进行比较)。这是我的代码:
int** read_data(char* filename, int** data, int& height, int& width)
{
data=new int*[height];
int row,col;
ifstream infile;
infile.open(filename,ios::binary|ios::in);
if(!infile.good())
{
return 0;
}
char* ch= new char[width];
for(row=0; row<height; row++)
{
data[row]=new int[width];
infile.read(ch,width);
for(col=0; col<width; col++)
{
data[row][col]=int(ch[col]);
cout<<data[row][col]<<" ";
}
cout<<endl;
}
infile.close();
return data;
}
知道这段代码可能有什么问题吗? 我的机器是 Windows,我使用的是 Visual Studio 2005,我传递的(确切的)文件名是:
"D:\\files\\output.dat"
编辑:如果我不使用 unsigned char,前 8 个值(均为 245)将被读取为 -11。
最佳答案
我认为,您可能必须使用 unsigned char 和 unsigned int 才能获得正确的结果。在您的代码中,您读取的字节被解释为带符号的值。我猜你不是故意的。
关于C++ 二进制文件读取问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6954853/