Конвертировать пакет Python в пакет PHP - PullRequest
0 голосов
/ 23 августа 2010

У меня есть этот скрипт на python

b_string = pack('>hqh2sh13sh5sh3sBiiihiiiiii',
                21, 0,
                len(country), country,
                len(device), device,
                len('1.3.1'), "1.3.1",
                len('Web'), "Web",
                27, 0, 0,
                3, 0, cid, lac,
                0, 0, 0, 0)

, и я хочу преобразовать его в php, это то, с чем я пришел до сих пор

$body= pack('nln2c*n13c*n5c*n3c*Ciiiniiiiii',
                    21, 0,
                    strlen($this->_mccToCountry[$this->_mcc]), $this->_mccToCountry[$this->_mcc],
                    strlen($this->_device), $this->_device,
                    strlen('1.3.1'), "1.3.1",
                    strlen('Web'), "Web",
                    27, 0, 0,
                    3, 0, $this->_cellId, $this->_lac,
                    0, 0, 0, 0);

Переменные такие же, как вскрипт Python, но я получил эту ошибку

Предупреждение PHP: pack (): Введите n: слишком мало аргументов в ... / application / extensions / Zend-extensions / NMS / Bts.php: 150

Помощь будет очень признателен.

1 Ответ

0 голосов
/ 23 августа 2010

Ваша строка параметров облажалась. В местах вы указываете, что собираетесь пройти 2, 5, 3 и 13 шорт, но каждый раз предоставляете только один. Вы указываете, что собираетесь предоставить серию символов, но затем вы предоставляете строку с NUL в конце. Вы указываете, что будете предоставлять неподписанный символ, но не предоставляете его. Попробуйте вместо этого строку формата:

'nlna*na*na*na*i3ni6'

Другой вариант - использовать serialize и deserialize. Не уверен, имеет ли для вас значение, что данные упакованы в байты или сериализованы в строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...