一次读取.dat文件两个字节

时间:2014-02-09 17:39:22

标签: c++ file-io

我有一个.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?感谢

2 个答案:

答案 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()功能,因为此功能错误
(当我使用这个函数时,它用来运行循环一次额外的时间......使我的输出错误)