1 голос
 
944 просмотра
5.04.2018 / 16:17  GreeNLine

ByteArray и PHP

Всем привет. На повестке дня такой вопрос, допустим, мне нужно будет отправить на сторонний сервер какой-нибудь пакет данных (закодированных) байтов. К примеру целочисленное значение (int), булевое (boolean), и строку (не важно в utf или ascii). Как можно всё это организовать.
===
Я нашёл всего несколько решений данной проблемы и то неуверен верны ли они.

1. Запаковывать всё в unpack, потом форматировать в hex и отправлять.
2. Запаковывать всё в pack и отправлять в голом виде.
ну и еще одно, ложное мб, мб нет, сначала форматировать с помощью ord и потом форматировать в hex, но есть трабла с этим, т.к ord выдаёт значение больше чем в диапазоне 0-255, поэтому я стал пользоваться 1-м способом.

Как вы считаете, как правильней, мб всё неверно..?
5.04.2018 / 17:01  MasterOS
по-моему 1й
Ответы
 
1 голос
 
# 5.04.2018 / 17:01  aNNiMON
Вместо велосипеда попробуй какой-нибудь универсальный способ. Например protobuf. Реализации есть как для php, так и для java, а значит, не придётся писать декодер на одном языке, а энкодер на другом.
Изм. aNNiMON от 5.04.2018 / 17:02
 
0 голосов
 
# 10.04.2018 / 12:39  Koenig
обязательно кодировать? обычный json не прокатит?
12.04.2018 / 09:00  GreeNLine
и писал обработчик для работы с флэш приложением на php, оно отсылает пакеты данных в диапазоне от 0xXXXX до 0xXXXXXX, первый байт - заголовок, второй опкод и т.д..
 
0 голосов
 
# 5.04.2018 / 18:27  GreeNLine
1-й вариант.

// ставим флажок типа данных C*, т.е unsigned char +* значит, что все значения строковые
$int_a = unpack("C*", "test");
// на выходе получаем массив целочисленных значений
// output: Array ( [1] => 116 [2] => 101 [3] => 115 [4] => 116 )
// дальше я так понял, что нужно int перевести в hex, сделал я это так:
$hex_a = array();
foreach($int_a as $int) {
$hex_a[] = sprintf('0x%02X', $int);
}
// и на выходе я получил следующее:
// output: Array ( [0] => 0x74 [1] => 0x65 [2] => 0x73 [3] => 0x74 )
// что дальше-то? в implode(null, $hex_a) и отправка или чё?
Всего: 3

Реклама

Мы в соцсетях

tw tg yt gt