Может ли a.out работать как в системе с прямым порядком байтов, так и в системе с прямым порядком байтов?
Нет, потому что практически любые два ЦП настолько различны, что имеют разный порядок байтовне будет запускать тот же набор инструкций.C ++ не Java;вы не компилируете что-то, что компилируется или интерпретируется.Вы компилируете в сборку для конкретного процессора.И endian-ness является частью ЦП.
Но это не проблема порядка байтов.Вы можете скомпилировать эту программу для разных процессоров, и эти исполняемые файлы будут нормально работать на соответствующих процессорах.
Что делает систему с прямым порядком байтов или с прямым порядком байтов?
КакЧто касается C или C ++, то процессор.Разные процессоры в компьютере могут на самом деле иметь разные порядки байтов (GPU может быть порядком байтов, в то время как процессоры имеют порядок байтов), но это несколько необычно.
Если я хочу записать порядок байтовНезависимая программа C ++, что мне нужно учитывать?
Пока вы играете по правилам C или C ++, вам не нужно заботиться о проблемах с порядком байтов.
Конечно, вы также не сможете загружать файлы непосредственно в структуры POD.Или прочитайте серию байтов, представьте, что это серия шорт без знака, и затем обработайте ее как строку в кодировке UTF-16.Все эти вещи вступают в сферу поведения, определяемого реализацией.
Существует разница между поведением "неопределенное" и "определяемое реализацией".Когда в спецификациях C и C ++ говорится, что что-то «неопределено», это в основном означает, что возможны всевозможные нарушения.Если вы продолжаете делать это (и ваша программа не падает), вы можете получить противоречивые результаты.Когда говорится, что что-то определено реализацией, вы получите согласованные результаты для этой реализации .
Если вы компилируете для x86 в VC2010, то, что происходит, когда вы притворяетесь, что байтовый массив являетсякороткий массив без знака (то есть: unsigned char *byteArray = ...; unsigned short *usArray = (unsigned short*)byteArray
) определяется реализацией.При компиляции для процессоров с прямым порядком байтов вы получите другой ответ, чем при компиляции для процессоров с прямым порядком байтов.
В общем, проблемы с порядком байтов - это то, что вы можете локализовать в системах ввода / вывода.Работа в сети, чтение файлов и т. Д. Об этом следует позаботиться в конечных точках вашей кодовой базы.