Вы не можете переключать порядок байтов в целях тестирования или чего-то подобного. Что вы можете сделать, так это установить эмулятор для архитектуры с прямым порядком байтов и скомпилировать свою программу для эмулятора. Вот один из способов:
http://people.debian.org/~aurel32/qemu/
- это образы дисков Debian для всех типов архитектур, поддерживаемых QEMU. mips, sparc и arm имеют прямой порядок байтов (не загружайте ничего, заканчивающееся на -el). Я использую Debian Lenny для MIPS ( http://people.debian.org/~aurel32/qemu/mips/ ). Установите QEMU для своей платформы, затем следуйте инструкциям на странице MIPS, чтобы загрузить образ и файл ядра.
Теперь вы можете загружаться в Debian 5 для MIPS прямо с консоли. Войдите в свою виртуальную машину, станьте суперпользователем (пароль «root») и установите C-компилятор:
debian-mips:~# su -
debian-mips:~# apt-get update
debian-mips:~# apt-get install gcc
запустите редактор и введите свою программу:
debian-mips:~# pico foo.c
debian-mips:~# gcc foo.c
debian-mips:~# ./a.out
big endian
Вы можете использовать кучу вызовов hton * (Host TO Network) и ntoh * (Network TO Host) между всеми вашими различными использованиями. Порядок порядка байтов в сети - Big Endian.
16 бит: htons = Узел К сети Короткое ntohs = Сеть К Хосту Короткое
32 бит: htonl = Хост ДО Сети Длинный ntohl = От сети к хосту Long
На самом деле и хост к сети, и сеть к хосту - одно и то же, потому что в любом случае происходит одинаковый обмен местами.
Обычно они реализованы как макросы и не работают на платформах, использующих прямой порядок байтов.
Они живут в:
#include <arpa/inet.h>
Который общедоступен.
Вы также можете использовать
, если он есть в ваших библиотеках. С gcc для этого требуется -D_BSD_SOURCE
В Unix, BSD и Linux попробуйте: человек htons человек с порядком байтов человек byteorder
Почему вы хотите определять порядок байтов вашей платформы во время выполнения? Когда вы переходите к компиляции, режим байта известен. Ваш код будет делать то, что вы ожидаете ... при условии, что короткий int равен 2 байтам на целевой платформе. Чтобы избежать этого зависания, лучше взгляните на последний байт. (байт [sizeof (короткое целое) - 1])
Если вы действительно хотите сделать это, вы можете использовать Intel Mac и собирать как для x86, так и для ppc. Исполняемый файл для ppc будет работать через эмуляцию Rosetta и будет иметь большой эндин, в то время как родная сборка для x86, конечно же, будет иметь малый эндин.