我正在处理音频数据。我想反向播放示例文件。数据存储为无符号整数,并且包装得很好。有没有办法以memcpy
相反的顺序调用它。即,如果我将 1、2、3、4 存储在一个数组中,我可以调用memcpy
并神奇地反转它们,从而得到 4、3、2、1。
问问题
26215 次
2 回答
11
不,memcpy 不会倒退。如果您正在使用 C 语言,请编写一个函数来执行此操作。如果你真的在 C++ 中工作,请使用 std::reverse 或 std::reverse_copy。
于 2010-02-11T05:40:33.713 回答
10
这适用int
于反向复制 s:
void reverse_intcpy(int *restrict dst, const int *restrict src, size_t n)
{
size_t i;
for (i=0; i < n; ++i)
dst[n-1-i] = src[i];
}
就像memcpy()
,所指向的区域dst
不能src
重叠。
如果要就地反转:
void reverse_ints(int *data, size_t n)
{
size_t i;
for (i=0; i < n/2; ++i) {
int tmp = data[i];
data[i] = data[n - 1 - i];
data[n - 1 - i] = tmp;
}
}
上述两个功能都是可移植的。您可以通过使用特定于硬件的代码使它们更快。
(我还没有测试代码的正确性。)
于 2010-02-11T05:43:42.437 回答