Функция pack
для целых чисел имеет несколько режимов, не зависящих от машины:
n unsigned short (always 16 bit, big endian byte order)
v unsigned short (always 16 bit, little endian byte order)
N unsigned long (always 32 bit, big endian byte order)
V unsigned long (always 32 bit, little endian byte order)
Для поплавков такой вещи не существует:
f float (machine dependent size and representation)
d double (machine dependent size and representation)
Однако практически во всех системах будет использоваться IEEE 754 одинарная точность для "float" и двойная точность для "d".
Итак, единственная переменная - это порядковый номер. Вы можете проверить порядковый номер системы, в которой работает система, например, выполнив:
$isLittle = pack('s', 1) == "\x01\x00")
А затем, если необходимо, поменять местами порядковый номер данных с помощью strrev
.