Еще в раннем железном веке Древние столкнулись с этой проблемой, когда пытались объединить примитивные миникомпьютеры PDP-11 в сеть с другими примитивными компьютерами. PDP-11 был первым компьютером с прямым порядком байтов, в то время как большинство других в то время были с прямым порядком байтов.
Чтобы решить эту проблему раз и навсегда, они разработали концепцию сетевого порядка байтов (всегда big-Endia) и соответствующие макросы сетевого порядка байтов ntohs(), ntohl(), htons() и htonl(). Код, написанный с помощью этих макросов, всегда будет «получать правильный ответ».
Положитесь на своего внешнего поставщика, чтобы он использовал макросы в своем коде, и файл, который они вам поставляют, всегда будет с обратным порядком байтов, даже если они перейдут на машину с прямым порядком байтов. Перепишите парсер, который они вам дали, чтобы использовать макросы, и вы всегда сможете прочитать их файл, даже если вы переключитесь на машину с обратным порядком байтов.
На решение этой конкретной проблемы было потрачено поистине огромное количество времени программиста. Бывают дни, когда я думаю, что можно привести хороший аргумент в пользу повешения дизайнера PDP-11, принявшего решение о функции с прямым порядком байтов.
person
John R. Strohm
schedule
07.01.2010
qemu
на своей машине с прямым порядком байтов :D - person ephemient   schedule 07.01.2010