将特定数据从源缓冲区复制到多个目标缓冲区
问题描述:
我有一个源缓冲区,我使用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];
}
答
也许这将让你和你的想法:
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版本,加倍如此,如果你需要问如何做到这一点,就像这里...
你有没有尝试过任何东西? – 2013-02-15 05:34:06
我害怕,除非你尝试一些东西并发布你所做的事,否则没有人会愿意帮助你。最好的方法是让你尝试一个样本,然后询问你对这个问题更精细的细节的怀疑。 – Jay 2013-02-15 05:34:43
我已经添加了我能想到的代码。现在你能帮我吗? – vaibh24 2013-02-15 05:57:39