gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 14:15:24 24 4
gpt4 key购买 nike

我在我的文件加载器中工作,我决定下一次更新更好,而不是继续使用 fread 和 fseek 将 hole 文件读取到 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

关于c++ - 将 BYTE 缓冲区的特定部分复制到结构+,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11655962/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com