LINUX.ORG.RU

swig, python и байтовое представление

 , , ,


0

1

Есть некоторый код на С, который на входе и выходе принимает структуры фиксированного размера (пакеты для работы с удалённым устройством). С помощью swig сделан доступ к ним из python-кода. Для отправки пакетов по сети и чтения ответа yнужендоступ к их байтовому представлению? Как это сделать?

★★★★★

Ответ на: комментарий от mittorn

Со struct проблема в том, что он воспринимает int[8], float[8] как 16 элементов, и при упаковке требует 16 аргументов, а при распаковке, соответственно, одаёт один массив а не два.

thunar ★★★★★
() автор топика

Скорее всего, это делается через cdata.i

Однако порылся сейчас в сорцах одного из своих проектов, где была похожая задача, и там почему-то это не используется. Сейчас уже не смогу вспомнить причину. Вместо этого там вот такой крайне небезопасный код. Пользоваться им не рекомендую, но на всякий случай выложу.

//*.hpp
class Preproc
{
    public:
        ///Returning data as a PyString
        PyObject* getJ();
        ///Setting data from a PyString
        void setJ(const char *p);
}
//*.cpp
PyObject* Preproc::getJ()
{
    return PyString_FromStringAndSize((const char*)(/*Указатель на структуру*/), (/*Размер в байтах*/));
}
void Preproc::setJ(const char *p)
{
    float *Jptr = (float*)p;
    /*Тут руками заполняем поля структуры*/
}

Ещё можешь посмотреть в сторону

Crocodoom ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.