Re: Trying to extract different types of data from a singe file.
JoeC <enki034@yahoo.com> kirjutas:
I am trying to create a windows program that reads binary graphics as
a resource. This has nothing to do with win32 but conversion of data
with memcpy.
graphic::graphic(UINT uiResID, HINSTANCE hinstance){
size = 32;
bitData.clear();
void * p = NULL; // point to the data
int end;
BYTE data;
static HGLOBAL hglob;
HRSRC hRes =
FindResource(hinstance,MAKEINTRESOURCE(uiResID),TEXT("BINARY"));
if(hRes){
hglob = LoadResource(hinstance,hRes);
p = LockResource(hglob);
memcpy((int*) &end, p, sizeof(int)); // puts the first but of
data to int.
for(int lp = 0; lp != end; lp++){
bitData.push_back(0);
}
for(int lp = 0; lp != end; lp++){
memcpy((BYTE*) &bitData[lp], p, sizeof(BYTE)); puts the rest
of the data in BYTE type.
Yes, this is not a win32 problem, it's just confusion with C pointer
arithmetics.
You are not advancing the p pointer in the above loop. You cannot advance
it as it is of type void*. In order to advance it, you could use a
pointer of unsigned char*, for example.
Of course, here it is not necessary, as memcpy is able to copy more than
1 byte at the time (surprise, surprise! :-).
So, assuming bitData is e.g. std::vector<unsigned char>, you could write:
void* p = LockResource(hglob); // p points to the binary resource data.
// interpret p as a pointer to int and read its value:
// (this assumes int is of the same size and representation
// as at the time of creating the binary data).
int n = * static_cast<int*>(p);
// advance p after the read int.
p = static_cast<int*>(p) + 1;
// resize the bytevector as needed
bitData.resize(n);
// read in the memory block.
memcpy(&bitData[0], p, n);
[OT]: you might want to look up the SizeofResource() SDK function and
simplify your code.
hth
Paavo
}
}
set();
create();
}
My question is how do I extract each but of data from p first to the
int type with is the number of data bits then each bit of data to put
into my bitData vector. I can't increase the pointer p++ to get to
the next bit of data. This compiles and runs but does not extract the
data for me.