Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

reading a .dat file two bytes at a time

Tags:

c++

file-io

I have a .dat file, like this:

NUL NUL NUL ...

So each entry inside this .dat file is a 16-bit signed integer. I want to use C++ to read it two byte at a time. This is currently my code to read it

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;
}

But it gives me error because

input.read(&h1, sizeof(short));

reads a byte at a time. I want to read 2 bytes at a time. Is there anyway I can do this? Or what is the best way to read a .dat file inside which there are a bunch of 16-bit signed int? Thanks

like image 904
Ono Avatar asked Nov 11 '22 13:11

Ono


1 Answers

read will read however many bytes you ask it to read. But you're not putting the data into your pData array. And you need to cast the first argument to char *.

like image 123
ooga Avatar answered Nov 15 '22 05:11

ooga