【发布时间】:2012-07-25 18:10:38
【问题描述】:
我在我的文件加载器中工作,我认为下一次更新更好,而不是继续使用 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));
【问题讨论】:
-
EDIT 发现错误,错误在memread函数中,现在我已经修复了,抱歉!如果有人感兴趣,我已修复代码!
-
顺便说一句:这是您尝试阅读的著名的 Fast Tracker XM 格式吗?
-
抱歉回复晚了,是的,我正在尝试为 XM、MOD 和 IT 格式制作一个完整的 C++ 开源播放器库,Chiptune 长寿命!我想下周准备好了,模式/通道/行加载完成,我需要完成的是样本/乐器加载播放速率并选择使用哪个库播放,我在考虑 WINMM 或 OPENAL,但我没有当然...
-
嗯,越多越好,我实际上打算将它用于演示和介绍,并拥有完美的同步系统,并使其可移植,并且又快又小……哦,我这样做是因为我根本无事可做,哈哈
标签: c++ arrays buffer byte memcpy