C memcpy наоборот

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

12
задан Keith Thompson 24 May 2015 в 22:06
поделиться

2 ответа

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

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

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

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

9
ответ дан 2 December 2019 в 19:54
поделиться

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

8
ответ дан 2 December 2019 в 19:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: