Sto scrivendo un analizzatore ELF, ma sto riscontrando qualche problema nel convertire correttamente endianness. Ho delle funzioni per determinare l'endianità dell'analizzatore e l'endianità del file oggetto.Endianness swap senza ntohs
Fondamentalmente, ci sono quattro possibili scenari:
- Un big endian compilato corsa analizzatore su un file oggetto big endian
- ha bisogno di niente convertiti
- Un big endian compilato analizzatore di corsa su un file oggetto little endian
- l'ordine dei byte deve essere scambiato, ma ntohs/l() e htons/l() sono entrambi macro nulli o n una macchina big endian, quindi non scambieranno l'ordine dei byte. Questo è il problema
- A little endian compilato corsa analizzatore su un file oggetto big endian
- le esigenze di ordine di byte scambiati, in modo da utilizzare htons() per scambiare l'ordine dei byte
- Un analizzatore compilato little endian gira su un piccolo file di oggetti endian.
- ha bisogno di niente convertiti
C'è una funzione che posso utilizzare in modo esplicito scambiare byte di ordine/cambio endianness, dal momento che ntohs/l() e htons/l() prendere endianness dell'host in considerazione e a volte non convertire? O devo trovare/scrivere la mia funzione di ordine dei byte di scambio?
Tuttavia, un comportamento tecnicamente non definito in C++. – bames53
Ma come facciamo a sapere l'ordine corretto? –
@BoPersson OP sa quando vuole scambiare byte. Ho modificato la mia risposta per esporre la soluzione più adeguata. –