我在我的文件加载器中工作,我决定对下一次更新更好,而不是继续使用fread和fseek将孔文件读取到BYTE缓冲区,我也是如此,现在我想知道如果不容易将此BYTE缓冲区的一部分分配给结构的方法。
我已经尝试制作一个与结构大小相同的临时缓冲区,将原始缓冲区中需要的所有BYTE复制到它,然后使用memcpy,但是它没有正常工作,我只是收到了很多随机数字(我认为我收到他们的指针,但我不知道对了)。
感谢您的时间!
修改:REAL代码
void memread(BYTE from[],int pos, void * to,size_t size)
{
BYTE * temp = new BYTE[sizeof(BYTE)*size];
for (unsigned int i = 0; i< 1+size; i++)
temp[i] = from[i+pos];
memcpy(to,temp,size);
}
... inside the file loader ...
fseek(fl,0,SEEK_END);
const int memory_size = (int)ftell(fl);
BYTE * memory = new BYTE[sizeof(BYTE)*memory_size];
fseek(fl,0,SEEK_SET);
for (int i=1;i<=memory_size;i++)
fread(&memory[i],sizeof(BYTE),1,fl);
fclose(fl);
int memory_pos = 0;
XM::Memory xm;
memset(&xm,0,sizeof(XM::Memory));
memread(memory,1,&xm.Header,sizeof(XM::Header));
答案 0 :(得分:0)
首先,您要逐字节读取文件,这会给您带来不良影响。接下来,您的memread
(您没有释放临时缓冲区!)可以用简单的memcpy
fseek(fl, 0, SEEK_END);
const int memory_size = (int)ftell(fl);
BYTE* memory = new BYTE[sizeof(BYTE) * memory_size];
fseek(fl, 0, SEEK_SET);
fread(memory, sizeof(BYTE), memory_size, fl);
fclose(fl);
int memory_pos = 0;
XM::Memory xm;
memset(&xm, 0, sizeof(XM::Memory));
memcpy(&xm.Header, memory + memory_pos, sizeof(XM::Header);
永远不要忘记delete[]
已分配的数组,例如temp
和memory