2012-10-10 7 views
1

J'essaie d'emballer des entiers comme octets en python et les décompresser en C. Donc, dans mon code python J'ai quelque chose commeEmballage en Python et en C Déballer

testlib = ctypes.CDLL('/something.so') 
testlib.process(repr(pack('B',10))) 

qui emballe 10 comme un octet et appelle la fonction "processus" dans mon code C. De quoi ai-je besoin dans mon code C pour décompresser ces données emballées?

C'est-à-dire, que dois-je faire pour obtenir 10 retour des données emballées données.

+2

Pourquoi le 'repr'? Cela va ajouter des citations autour de vos octets, je doute que vous le vouliez. –

+1

A quoi ressemble le prototype de la fonction C de 'process'? Pouvez-vous le changer? Si oui, pourquoi ne pas le faire prendre un nombre entier et sauter l'ensemble de l'octet entier? –

+0

Je peux changer le code C mais le but du code est de décompresser quelque chose empaqueté en python donc sauter l'emballage n'est pas une option. – shoopdelang

Répondre

0

En supposant que vous avez une chaîne de 10 octets contenant 10 entiers, il suffit de copier les données.

char packed_data[10]; 
int unpacked[10]; 

int i; 
for(i = 0; i < 10; ++i) 
    unpacked[i] = packed_data[i]; 

... ou en utilisant memcpy

D'autre part, si vous utilisez 4 octets pr int lors de l'emballage, vous pouvez diviser la chaîne char en C et utiliser atoi dessus. Comment échangez-vous des données de Python vers C?

+0

Je suis en train de faire quelque chose comme testlib.process (repr (pack ('B', 8))) où repr (pack ('B', 8)) est une chaîne '\ x08'. Je ne sais pas si c'est la bonne/la meilleure façon de le faire. – shoopdelang