我有一个源缓冲区,我使用malloc声明,我使用fread从缓冲区读取大文件中的一些数据。现在我想将这个源缓冲区中的备用数据块(比如每个2字节)分成两个目标缓冲区。可以推断这个问题是将每个第n个块复制到n个目标缓冲区。对于两个目标缓冲区的最简单情况,我需要以示例代码的形式提供帮助。这就是我想到的,我确信这不是正确的事情。
int totsamples = 256*2*2;
int *sbuff = malloc(totsamples);
int *tbuff1 = malloc(totsamples/2);
int *tbuff2 = malloc(totsamples/2);
elements = fread(sbuff, 2, 256*2, fs);
for(i = 0; i<256; i++)
{
tbuff1[i] = sbuff[i*2];
tbuff2[i] = sbuff[(i*2) + 1];
}
答案 0 :(得分:1)
也许这会给你和想法:
for(i = 0; i<256; i++)
{
tbuff1[2*i+0] = sbuff[i*4+0];
tbuff1[2*i+1] = sbuff[i*4+1];
tbuff2[2*i+0] = sbuff[i*4+2];
tbuff2[2*i+1] = sbuff[i*4+3];
}
注意:上面的代码与您的malloc()
参数有关,因为不清楚totsamples
的含义是什么,所以在使用前修复一下......
另一个注意事项:如果你想要超过2个长项目块,那么使用memcpy
进行复制就更有意义了。
建议:使用常量而不是幻数,例如const int SAMPLES=256;
。我也不确定,但看起来您认为int
的大小是2?不要,而是使用sizeof(int)
等(int
的大小很少是2,顺便说一句。)
嗯......你是否真的试图通过使用整数复制字节来一次复制4个字节来优化事物? Don't! "Premature optimization is root of all evil"。你可以考虑稍后,在你的代码工作之后,但首先创建一个工作非hacky版本,并且加倍,如果你需要问如何做甚至这样,就像这里......