Я получаю строку ASCII, как это:
�=message :;:-RemoteCommunicationNo version set.%�? ���2?䋹�
Я должен декодировать его в hex и я использую bin2hex. Я получаю эти данные:
0da46500000810123d0a3b3a0a2d0a1352656d6f7465436f6d6d756e69636174696f6e12001a0f4e6f2076657273696f6e207365742e250000803f12090900000060a12b313f
Что правильно. Однако я хочу только 3-4 байта (65,00,00) этой строки.
Какой самый эффективный способ поместить эти три байта в переменную?
Это зависит от того, что вы подразумеваете под «эффективным». Вы имеете в виду эффективный для вашего кодирования или эффективный для производительности? Я предоставлю оба.
Предполагается, что вы знаете, что длина строки всегда будет не менее 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];
Других решений пока нет …