Piszę analizator ELF, ale mam problem z poprawną endianness prawidłowo. Mam funkcje do określenia endianness analizatora i endiannness pliku obiektu.Zamień Endianness bez ntohs
Zasadniczo istnieją cztery możliwe scenariusze:
- Dużym endian skompilowany analizator bieg na pliku obiektowego big endian
- potrzebuje niczego przekształcone
- Dużym endian skompilowany prowadzony przez analizator na mały obiekt obiektu endianowego
- zamieniono kolejność bajtów, ale ntohs/l() i htons/l() są zarówno zerowymi makrami n duża maszyna endianowa, więc nie zamieniają kolejności bajtów. To jest problem
- Trochę endian skompilowany analizator bieg na pliku obiektowego big endian
- potrzeby kolejność bajtów zamienione, więc używaj htons(), aby zamienić kolejność bajtów
- Mały kompilator skompresowany na końcu endianu na małym pliku obiektu endian.
- potrzebuje niczego przekształcone
Czy istnieje funkcja mogę używać jawnie zamienić byte order/zmień kolejność bajtów, ponieważ ntohs/l() i htons/l() podejmuje endianness gospodarza pod uwagę a czasami się nie konwertuje? Czy muszę znaleźć/napisać własną funkcję zamiany bajtów?
Technicznie niezdefiniowane zachowanie w C++. – bames53
Ale skąd znamy właściwą kolejność? –
@BoPersson OP wie, kiedy chce zamienić bajty. Zmieniłem moją odpowiedź, aby przedstawić bardziej odpowiednie rozwiązanie. –