15

我正在处理音频数据。我想反向播放示例文件。数据存储为无符号整数,并且包装得很好。有没有办法以memcpy相反的顺序调用它。即,如果我将 1、2、3、4 存储在一个数组中,我可以调用memcpy神奇地反转它们,从而得到 4、3、2、1。

4

2 回答 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 回答