производительность — проверьте три байта внутри шестнадцатеричной строки в переполнении стека

Я получаю строку ASCII, как это:

�=message :;:-RemoteCommunicationNo version set.%�?     ���2?䋹�

Я должен декодировать его в hex и я использую bin2hex. Я получаю эти данные:

  0da46500000810123d0a3b3a0a2d0a1352656d6f7465436f6d6d756e69636174696f6e12001a0f4e6f2076657273696f6e207365742e250000803f12090900000060a12b313f

Что правильно. Однако я хочу только 3-4 байта (65,00,00) этой строки.

Какой самый эффективный способ поместить эти три байта в переменную?

0

Решение

Это зависит от того, что вы подразумеваете под «эффективным». Вы имеете в виду эффективный для вашего кодирования или эффективный для производительности? Я предоставлю оба.

Лучшее представление

Предполагается, что вы знаете, что длина строки всегда будет не менее 10 символов, и вам никогда не нужны первые символы (первые два байта).

Разбор строк стоит дорого, и вам не нужно разбирать всю строку.

http://php.net/manual/en/function.substr.php

$interestingPart = substr($yourHexString, 4, 6);
$firstByte = substr($interestingPart, 0, 2);
$secondByte = substr($interestingPart, 2, 2);
$thirdByte = substr($interestingPart, 4, 2);

Легче всего кодировать

http://php.net/manual/en/function.str-split.php

$bytesArray = str_split($yourHexString, 2);
$bytesDesired = $bytesArray[2] . $bytesArray[3] . $bytesArray[4];
0

Другие решения

Других решений пока нет …