Estoy escribiendo un analizador ELF, pero estoy teniendo algunos problemas para convertir el endianness correctamente. Tengo funciones para determinar el endianness del analizador y la endiannness del archivo del objeto.Intercambio de endianness sin ntohs
Básicamente, hay cuatro escenarios posibles:
- Un endian compilado gran analizador de ejecución en un archivo de objeto big endian
- nada necesidades convierten
- Un endian compilado gran analizador de carrera y un pequeño archivo de objeto endian
- el orden de bytes necesita ser intercambiado, pero ntohs/l() y htons/l() son macros nulos o n una gran máquina endian, por lo que no cambiarán el orden de bytes. Este es el problema
- Un poco endian compilado analizador de ejecución en un archivo de objeto big endian
- las necesidades de orden de bytes intercambiados, a fin de utilizar htons() para cambiar el orden de bytes
- Un pequeño analista compilado endian se ejecuta en un pequeño archivo de objeto endian.
- nada necesidades convierten
¿Hay una función que pueda usar para explícitamente intercambiar byte de orden/cambio de orden de bits, ya que ntohs/l() y htons/l() tomar endianness del huésped en cuenta y a veces no se convierten? ¿O necesito encontrar/escribir mi propia función de orden de bytes de intercambio?
Comportamiento técnicamente indefinido en C++. – bames53
Pero, ¿cómo sabemos el orden correcto? –
@BoPersson OP sabe, cuando quiere intercambiar bytes. He editado mi respuesta para exponer la solución más adecuada. –