我正在使用音频数据。我想反向播放示例文件。数据被存储为未签名的INT,包装好且紧密。有办法打电话吗 memcpy 这将以相反的顺序复制。即,如果我存储在数组中的1,2,3,4,我可以打电话给 memcpy神奇 扭转它们,所以我得到4,3,2,1。

有帮助吗?

解决方案

这可以复制 int相反:

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(), ,由 dstsrc 不能重叠。

如果您想倒置就地:

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;
    }
}

以上两个功能都是便携式的。您可能可以通过使用特定于硬件的代码使它们更快。

(我尚未测试代码的正确性。)

其他提示

不,memcpy不会向后做。如果您在C中工作,请编写一个函数来执行此操作。如果您真的在C ++工作,请使用std :: reververs或std :: reverse_copy。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top