Question
Je travaille avec des données audio. Je voudrais lire l'exemple de fichier à l'envers. Les données sont stockées sous forme d'INTS non signées et emballées bien et serrées. Y a-t-il un moyen d'appeler memcpy
qui copiera dans l'ordre inverse. c'est-à-dire que si j'avais 1,2,3,4 stocké dans un tableau, puis-je appeler memcpy
et magiquement Inversez-les donc je reçois 4,3,2,1.
La solution
Cela fonctionne pour la copie int
s en sens inverse:
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];
}
Juste comme memcpy()
, les régions pointées par dst
et src
ne doit pas se chevaucher.
Si vous souhaitez inverser en place:
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;
}
}
Les deux fonctions ci-dessus sont portables. Vous pourrez peut-être les rendre plus rapidement en utilisant du code spécifique au matériel.
(Je n'ai pas testé le code pour l'exactitude.)
Autres conseils
Non, Memcpy ne fera pas ça en arrière. Si vous travaillez en C, écrivez une fonction pour le faire. Si vous travaillez vraiment en C ++, utilisez STD :: Reverse ou STD :: Reverse_Copy.