我正在编写一个函数,用于读取包含一些转储数据(一系列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"
编辑: 如果我不使用无符号字符,前8个值,它们都是245, 会被读取成-11。