我正在处理音频数据.我想反向播放示例文件.数据存储为无符号整数并且包装良好且紧凑.有没有办法调用memcpy
将以相反的顺序复制.即如果我有1,2,3,4存储在一个数组中,我可以调用memcpy
并神奇地反转它们,所以我得到4,3,2,1.
这适用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];
}
Run Code Online (Sandbox Code Playgroud)
就像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;
}
}
Run Code Online (Sandbox Code Playgroud)
上述两个功能都是可移植的.您可以通过使用特定于硬件的代码来加快它们的速度.
(我没有测试代码的正确性.)
不,memcpy不会倒退.如果您在C中工作,请编写一个函数来执行此操作.如果您真的在C++中工作,请使用std :: reverse或std :: reverse_copy.