Преобразовать целое число / число с плавающей точкой в ​​различные архитектурные представления (может быть в шестнадцатеричном формате) - PullRequest
2 голосов
/ 05 сентября 2010

Есть ли какая-нибудь библиотека ведьм, которую я могу использовать для преобразования целых чисел и чисел между представлениями разных архитектур?

т.е.-255 с двухбайтовым целым числом со знаком с прямым порядком байтов: 0xff7f и для 4-байтового целого числа со знаком 0xffffff7f и то же самое с другими ...

Я нашел пакет двоичных инструментов в PEAR, но его состояние не поддерживается и остановленоВерсии 0.3.0, я не уверен, что она даст правильные результаты.

[EDIT]

Я знаю о пакете функций, но его результаты, как сказано вруководство зависит от машины, ведь я не хочу иметь результат

1 Ответ

0 голосов
/ 06 сентября 2010

Функция 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...