我有一个.dat文件,如下所示:
NUL NUL NUL ...
因此,此.dat文件中的每个条目都是一个16位有符号整数。我想用C ++一次读取两个字节。这是我目前阅读它的代码
short* ReadData(char* fileName, long imgWidth, long imgHeight, long bytePerPixel)
{
short * pData = new short[imgWidth*imgHeight*bytePerPixel];
short h1;
try
{
std::ifstream input(fileName, std::ios::binary);
while(!input.eof())
{
//Read file one byte at a time
input.read(&h1, sizeof(short));
}
return pData;
}
catch(int i)
{
return NULL;
}
delete pData;
}
但它给了我错误,因为
input.read(&h1, sizeof(short));
一次读取一个字节。我想一次读取2个字节。无论如何我能做到吗?或者读取.dat文件的最佳方法是什么,其中有一堆16位有符号的int?感谢
答案 0 :(得分:3)
read
会读取您要求它读取的许多字节。但是你没有将数据放入pData
数组中。你需要将第一个参数转换为char *
。
答案 1 :(得分:-2)
这样做
input.read(&h1,2); //the number 2 indicates the
//number of bytes you are
//reading at a time
而不是
input.read(&h1, sizeof(short));
请不要使用eof()功能,因为此功能错误
(当我使用这个函数时,它用来运行循环一次额外的时间......使我的输出错误)