Почему функция PHP pack ("h *", 0x41) печатает неправильный текст ASCII - PullRequest
1 голос
/ 19 марта 2019

Я прочитал здесь , как использовать функцию pack в PHP.

Согласно документации в формате h будет напечатано

шестнадцатеричная строка, сначала маленький клев

Я хотел проверить, как это работает, поэтому я выполнил следующую команду:

echo pack("h*", 0x41) . "<br />"  ;

Вы можете попробовать его на этом онлайн-сайте команд PHP.

Он печатает символ V.
Но 0x41 - это 65 в десятичном виде, 01000001 в двоичном и A в ASCII / ANSI.
Почему напечатано V, а не A?
Я понимаю, что он упаковывает его в двоичную структуру, но двоичная структура 01000001, которая должна быть A.

Ответы [ 2 ]

1 голос
/ 19 марта 2019

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

  1. ч: шестнадцатеричная строка, сначала маленький клев
  2. c: подписанный символ

Итак, вы попробуйте так:

echo pack("h*", 0x41) . "<br />"  ;

Он печатает символ V.

Когда вы попробуете это так:

echo pack("c*", 0x41) . "<br />"  ;

Он печатает символ А.

1 голос
/ 19 марта 2019

Точно, используя правильный формат для h, low nibble первым, поэтому:

echo pack("h*", "14");

Выход:

A

Тот же вывод для H с high nibble first:

echo pack("H*", "41");

Лучше использовать H для большей интуитивности.

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