Что означает машинный порядок байтов в пакете PHP?

Я понимаю маленький и большой порядок байтов, но что означает «машинный порядок байтов»?


person iamart    schedule 14.09.2012    source источник
comment
это вопрос или утверждение?   -  person Dave Lasley    schedule 14.09.2012
comment
Это означает порядок байтов машины, на которой он работает.   -  person Travesty3    schedule 14.09.2012
comment
возможный дубликат Когда вы используете unpack('h*'...) или пакет('ч*' ...)?   -  person mario    schedule 14.09.2012
comment
Это означает, что PHP будет упаковывать в том порядке, в котором его использует основная машина, на которой он работает, а это означает, что упаковка будет давать разные результаты на разных платформах, используя один и тот же код.   -  person Marc B    schedule 14.09.2012
comment
@MarcB, значит, для unpack() это не влияет?   -  person iamart    schedule 15.09.2012


Ответы (1)


В pack фраза "машинный порядок байтов" означает, что порядок следования байтов определяется текущая машина1

Сам PHP не дает никаких гарантий в отношении порядка байтов, в котором такие символы (например, S, L) кодируют данные, за исключением случаев, когда порядок касается текущей машины.

Поэтому будьте осторожны с использованием символов пакета "машинного порядка байтов" и рассмотрите эквивалентные части гарантированного порядка (например, n, v), если есть какие-либо сомнения1. Однако обратите внимание на спецификацию целевых данных, так как некоторые нелепые форматы, такие как [Microsoft] UUID, представлены в терминах "машинного порядка байтов", в то время как другие всегда имеют обратный порядок байтов или обратный порядок байтов.


1 x86/x64 всегда имеет обратный порядок байтов, но технически PHP может работать на машинах с прямым порядком байтов... где-то. Лучше всего выработать привычку быть явным и точным, чтобы избежать внезапного и загадочного «переставания работы» кода позже.

person Community    schedule 14.09.2012