Вопрос
Я работаю с аудиодантами. Я хотел бы воспроизводить образцо -файл в обратном порядке. Данные хранятся в виде USINGED INT и упакованы красивыми и плотными. Есть ли способ позвонить memcpy
это скопирует в обратном порядке. т.е. если бы у меня было 1,2,3,4, хранилось в массиве, я мог бы позвонить memcpy
а также волшебным образом Обратите их, чтобы я получил 4,3,2,1.
Решение
Это работает для копирования 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;
}
}
Обе функции выше портативны. Вы можете сделать их быстрее, используя аппаратный код.
(Я не тестировал код на правильную.)
Другие советы
Нет, Memcpy не сделает это задом наперед. Если вы работаете в C, напишите функцию, чтобы сделать это. Если вы действительно работаете в C ++, используйте std :: reverse или std :: reample_copy.