2010-08-23 6 views
0

J'ai ce script pythonConvert pack python pack php

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) 

et je veux le convertir en php, ce que je suis venu avec jusqu'à

$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); 

Les variables sont les mêmes que ceux dans le script python, mais j'ai eu cette erreur

PHP Attention: pack(): Type n: trop peu d'arguments dans .../application/extensions/Zend-extensions/NMS/Bts.php: 150

L'aide sera très appréciée.

+0

N'avez-vous pas l'intention d'utiliser le premier paramètre comme un type de code tel que «n» pour 16 bits non affecté. – RobertPitt

Répondre

0

Votre chaîne de paramètres est entièrement vissée. Vous indiquez dans les lieux que vous allez passer 2, 5, 3 et 13 shorts, mais n'en fournissez qu'un à chaque fois. Vous indiquez que vous allez fournir une série de caractères mais vous fournissez une chaîne terminée NUL. Vous indiquez que vous fournirez un caractère non signé mais n'en fournissez pas. Essayez cette chaîne de format à la place:

'nlna*na*na*na*i3ni6' 

Une autre option consiste à utiliser à la place serialize et deserialize. Vous ne savez pas s'il est important pour vous que les données soient stockées dans des octets ou sérialisées dans des chaînes.