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.

Foi útil?

Solução

Isso funciona para copiar ints 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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top