【发布时间】:2011-10-20 18:09:18
【问题描述】:
我正在编写一个函数来读取包含一些转储数据(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 字符并转换为 unsigned 整数。
-
数据应该分配在这个函数之外。
-
@longbkit 这是 C++。根本不应该手动分配数据。
-
@longbkit 在这个函数之外,我负责“数据”。在这个函数中,值被复制到“数据”数组中。所以,数组没有问题,我可以向你保证。
-
你能不能给我们更多的细节 - 你有什么样的不正确?
标签: c++ visual-studio file