15

オーディオデータを扱っています。サンプルファイルを逆再生したいのですが。データは署名されていないintとして保存され、しっかりとパックされます。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 に答える