Вопрос

Я работаю с аудиодантами. Я хотел бы воспроизводить образцо -файл в обратном порядке. Данные хранятся в виде USINGED INT и упакованы красивыми и плотными. Есть ли способ позвонить memcpy это скопирует в обратном порядке. т.е. если бы у меня было 1,2,3,4, хранилось в массиве, я мог бы позвонить memcpy а также волшебным образом Обратите их, чтобы я получил 4,3,2,1.

Это было полезно?

Решение

Это работает для копирования ints в обратном порядке:

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

Обе функции выше портативны. Вы можете сделать их быстрее, используя аппаратный код.

(Я не тестировал код на правильную.)

Другие советы

Нет, Memcpy не сделает это задом наперед. Если вы работаете в C, напишите функцию, чтобы сделать это. Если вы действительно работаете в C ++, используйте std :: reverse или std :: reample_copy.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top