将特定数据从源缓冲区复制到多个目标缓冲区

时间:2013-02-15 05:29:57

标签: c

我有一个源缓冲区,我使用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];
}

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版本,并且加倍,如果你需要问如何做甚至这样,就像这里......