将BYTE缓冲区的特定部分复制到结构+中
Copy a specific part of a BYTE buffer to a structure+
我在我的文件加载程序中工作,我决定下一次更新更好,而不是继续使用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[]
您分配的数组,如temp
和memory
相关文章:
- 在一个微不足道的可复制结构中,移动语义应该实现吗?
- 复制结构 tm
- 复制结构时,system.AccessVioLationException
- C++:是否隐式复制结构
- 复制结构的一部分
- 在不使用 std::copy 函数的情况下编写这个复杂的复制结构体
- memcpy 问题 -> 尝试复制结构数组
- 使用declard和参数转发构造函数隐式复制结构
- 如何复制结构数组
- 如何复制结构数组
- C++ 不带指针的复制结构
- 添加到矢量而不复制结构数据
- 从 std::vector 中删除复制结构成员
- 仅在发布版本中出错,从 std::vector 复制结构
- 引用或复制结构的结构(已分配的memset)是一件有效的事情
- 深度复制结构C++
- 如何从指向void的指针复制结构体
- 在新版本的 gcc 上返回隐式不可复制结构的 std::map 时出现编译错误
- C/C++是如何复制结构的
- c++内存复制结构体到字节数组中