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