Как получить тип endianness в PHP? - PullRequest
6 голосов
/ 17 марта 2012

В C # я могу получить тип порядка байтов с помощью этого фрагмента кода:

if(BitConverter.IsLittleEndian)
{
   // little-endian is used   
}
else
{
   // big-endian is used
}

Как я могу сделать то же самое в PHP?

Ответы [ 2 ]

8 голосов
/ 16 июля 2014
function isLittleEndian() {
    return unpack('S',"\x01\x00")[1] === 1;
}

Системы с прямым порядком байтов хранят младший байт в наименьшем (крайнем левом) адресе. Таким образом, значение 1, упакованное как «short» (2-байтовое целое число), должно иметь свое значение, сохраненное в левом байте, тогда как система с прямым порядком байтов сохранит его в правом байте.

8 голосов
/ 17 марта 2012

Тип строки PHP - это 8-битная двоичная строка, последовательность char.Это не имеет порядка байтов.Таким образом, по большей части порядок байтов не является проблемой в PHP.

Если вам нужно подготовить двоичные данные с определенным порядком байтов, используйте pack() и unpack() функций.

Если вам нужно определить собственный порядок байтов машины, вы можете использовать pack() и unpack() таким же образом.

function isLittleEndian() {
    $testint = 0x00FF;
    $p = pack('S', $testint);
    return $testint===current(unpack('v', $p));
}
...