Я пытаюсь отправить 0x01 HEX в качестве байта socket_write ($ socket, XXXX, 1);
Существует часть документации:
«… Если да, сервер ответит на модуль 0x01, если нет – повторите 0x00. Сервер должен отправить ответ – 1 байт в формате HEX»
Есть ли решение сделать это с помощью PHP?
Существует несколько альтернатив:
При использовании функции pack()
строковый аргумент в спецификаторе формата H*
не должен содержать префикс 0x
.
pack("H*", "01")
Чтобы преобразовать один шестнадцатеричный номер в байт, вы также можете использовать chr()
.
chr(0x01)
Здесь PHP сначала интерпретирует шестнадцатеричный литерал 0x01
в одно целое число 1
, а chr () преобразует его в строку. Отмена (для чтения сокетов) – ord()
.
Наиболее распространенной альтернативой является использование только экранов C-string :
"\x01"
Или в восьмеричных обозначениях:
"\001"
hex2bin("01")
работает так же, как pack("H*")
здесь. И есть bin2hex
для противоположного направления.