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