2014-10-22 2 views
1

Я пытаюсь отправить 0x01 HEX в качестве байта socket_write ($ socket, XXXX, 1);PHP конвертировать hex в байт

Существует часть документации:

«... Если да, то сервер будет отвечать на модуль 0х01, если нет - переигровка 0x00 сервер должен послать ответ - 1 байт в шестнадцатеричном формате.»

Есть ли решение сделать это с помощью PHP?

+3

'pack()'/'unpack' или строка escapes" \ x01 ". – mario

+0

Я пробовал: $ data = pack ('H *', "0x01"); socket_write ($ socket, $ data, 1); ... но это не работает. – Enid

ответ

4

Есть несколько альтернатив:

  • При использовании функции pack(), строковый аргумент в H* спецификатор формата должен не включать префикс 0x.

    pack("H*", "01") 
    
  • Для преобразования одного шестигранного числа в байты вы можете также использовать chr().

    chr(0x01) 
    

    Здесь первый РНР интерпретирует гекс-буквальный 0x01 в простой целое 1, в то время как CHR() преобразует его в строку. Переворот (для считывания сокетов) равен ord().

  • Наиболее распространенной альтернативой является использование только с помощью C-string escapes:

    "\x01" 
    

    Или в восьмеричное:

    "\001" 
    
  • hex2bin("01") работает так же, как pack("H*") здесь. И есть bin2hex для противоположного направления.

Смежные вопросы