Estoy trabajando con datos de audio. Me gustaría reproducir el archivo de muestra al revés. Los datos se almacenan como entradas sin firmar y se empaquetan bien y apretados. ¿Hay alguna manera de llamar al memcpy
que copiará en orden inverso? es decir, si tuviera 1,2,3,4 almacenado en una matriz, ¿podría llamar a memcpy
y mágicamente invertirlos para obtener 4,3,2,1.C memcpy en reversa
Respuesta
Esto funciona para copiar int
s en sentido inverso:
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];
}
Al igual que memcpy()
, las zonas en punta-a por dst
y src
no deben solaparse.
Si desea invertir en el lugar:
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;
}
}
Tanto las funciones anteriores son portátiles. Es posible que pueda hacerlos más rápidos utilizando un código específico del hardware.
(no he probado el código de corrección.)
¿Cuál es la eficacia de esto en comparación con memcpy? –
'memcpy' debería ser O (n) y así debería funcionar esta función' reverse_memcpy'. – dreamlax
Con mi prueba rápida, con la optimización '-O3',' reverse_memcpy() 'es aproximadamente 3 veces más lenta que' memcpy() 'para copiar 1000000 bytes. Para 10000 iteraciones con 1000000 bytes, 'memcpy()' tomó 4 segundos, y 'reverse_memcpy()' tomó 11. Pero estos números son para un caso muy específico, por lo que es posible que desee probar las cosas por sí mismo. Por supuesto, como dijo dreamlax, ambos son O (n). –
No, memcpy no hará eso al revés. Si estás trabajando en C, escribe una función para hacerlo. Si realmente está trabajando en C++, use std :: reverse o std :: reverse_copy.
Sé que esto es viejo, pero ¿podría publicar un ejemplo de una función que hace esto? Es simple, pero podría ayudar a alguien. –
- 1. memcpy vs asignación en C
- 2. codificar video en reversa?
- 3. Delphi CopyMemory vs C++ memcpy
- 4. cómo iterar en reversa sobre un mapa en C++
- 5. optimizado memcpy
- 6. C# declaración de tipo de matriz irregular en reversa
- 7. C - Malloc y memcpy (gestión de memoria)
- 8. memcpy asincrónico en Linux?
- 9. Struct assignment or memcpy?
- 10. ¿Memcpy() usa realloc()?
- 11. ¿Cómo atravesar Linked Hash Map en reversa?
- 12. strcpy vs. memcpy
- 13. Cuál es la diferencia entre memset y memcpy en C
- 14. Memcpy() en la programación segura?
- 15. ¿Hay un equivalente a memcpy() en Java?
- 16. memcpy y punteros
- 17. ¿Se reentrató la función memcpy()?
- 18. ¿Cómo usar memcpy?
- 19. memcpy con startIndex?
- 20. optimizaciones std :: copy/memcpy/memmove
- 21. C++ memcpy del array doble al array flotante
- 22. Diferencia entre strncpy y memcpy?
- 23. Microsoft SDL y memcpy deprecation
- 24. alternativa más rápida a memcpy?
- 25. Directiva Delphi Compiler para Evaluar Argumentos en Reversa
- 26. ¿Es posible ejecutar una red neuronal en reversa?
- 27. ¿En qué casos debo usar memcpy sobre los operadores estándar en C++?
- 28. ¿Hay una versión estándar, strided de memcpy?
- 29. ¿Cómo prevenir el desbordamiento del búfer memcpy?
- 30. evitar la trampa de representación con memcpy
C no tiene una función de esa manera, pero es muy fácil de escribir uno. –
Podría valer la pena considerar cambiar la forma * de iterar * sobre los datos en lugar de cambiar el orden, sospecho que sería más eficiente ... –
Me has confundido con * mágicamente *. –