将BYTE缓冲区的特定部分复制到结构+中

Copy a specific part of a BYTE buffer to a structure+

本文关键字:复制 结构 定部 BYTE 缓冲区      更新时间:2023-10-16

我在我的文件加载程序中工作,我决定下一次更新更好,而不是继续使用fread和fseek将孔文件读取到BYTE缓冲区,我也是这样做的,现在我想知道是否没有简单的方法将BYTE缓冲的一部分分配给结构。

我已经尝试过制作一个与结构大小相同的临时缓冲区,将我需要的所有BYTE从原始缓冲区复制到它,并使用memcpy,但它不起作用,我只是收到了很多随机数(我认为我收到了他们的指针,但我不知道对不对)。

感谢您抽出时间!

编辑:真实代码

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

首先,逐字节读取文件,这会给您带来糟糕的性能。接下来,您的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[]您分配的数组,如tempmemory