0

我有一个使用 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];
}
4

1 回答 1

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)etc (并且大小int很少是 2,顺便说一句)。

嗯...您实际上是在尝试通过使用整数复制字节来一次复制 4 个字节来优化事物吗?不!“过早优化是万恶之源”。您可能会考虑稍后,在您的代码以其他方式工作之后,但首先创建一个工作的非hacky版本,如果您需要询问如何做到这一点,就像这里...

于 2013-02-15T07:25:06.800 回答