Pergunta
Eu estou trabalhando com dados de áudio.Eu gostaria de reproduzir o arquivo de exemplo no sentido inverso.Os dados são armazenados como ints não assinados e embalado agradável e apertado.Existe uma maneira de chamar memcpy
que vai copiar na ordem inversa.i.e.se eu tivesse 1,2,3,4 armazenados em uma matriz, pode me chamar de memcpy
e magicamente revertê-las assim que eu chegar 4,3,2,1.
Solução
Isso funciona para copiar int
s em ordem inversa:
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];
}
Assim como memcpy()
, regiões, apontou-a por dst
e src
não devem sobrepor-se.
Se você deseja reverter no local:
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;
}
}
Ambas as funções acima são portáteis.Você pode ser capaz de torná-los mais rápido utilizando o hardware de código específico.
(Eu não testei o código para correção.)
Outras dicas
Não, memcpy não para trás.Se você está trabalhando em C, escrever uma função para fazê-lo.Se você está realmente trabalhando em C++ uso std::reversa ou std::reverse_copy.