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.

Était-ce utile?

La solution

Cela fonctionne pour la copie ints 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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top