2016-01-07 3 views
2

Я отправляю структуру в двоичном формате от C до моего сценария python.Распаковка структуры C с структурным модулем Pythons

Моя C структура:

struct EXAMPLE { 
    float val1; 
    float val2; 
    float val3; 
} 

Как отправить:

struct EXAMPLE *ex; 
ex->val1 = 5.3f; 
ex->val2 = 12.5f; 
ex->val3 = 15.5f; 

write(fd, &ex, sizeof(struct EXAMPLE)); 

Как я получаю:

buf = sock.recv(12) 
buf = struct.unpack('f f f', buf) 
print buf 

Но когда я печатаю его на стороне питона все I get - это случайный мусор. Я уверен, что что-то не так с определением структуры в python, но я не уверен, что.

+0

Я предлагаю проверить порядок байтов вы отправки/получения в –

+0

'ex' уже указатель, а затем вы пишете на адрес указателя. – RyanL

+0

У вашей C-структуры может быть и дополнение, которое вам нужно сообщить о распаковке кода Python. Кроме того, я не уверен, что такое пространство в формате. В любом случае, каковы фактические байтовые значения, отправляемые? Какие значения байтов принимаются? –

ответ

2

Эта линия является неправильным:

write(fd, &ex, sizeof(struct EXAMPLE)); 

Оно должно быть:

write(fd, ex, sizeof(struct EXAMPLE)); 
+0

Ну, это было, спасибо. – Phenom588

Смежные вопросы