Ответ 1
Существует библиотека под названием PicklingTools, которую я поддерживаю, которая может быть полезной: она позволяет вам создавать структуры данных на С++, которые вы затем можете распиливать/разглаживать... это С++, а не C, но это не должно быть проблемой в эти дни (предполагая, что вы используете пакет gcc/g++).
Библиотека представляет собой обычную библиотеку С++ (в дистрибутиве есть примеры С++ и Python, показывающие, как использовать библиотеку через сокеты и файлы как из С++, так и из Python), но в целом доступны основы травления в файлах.
Основная идея заключается в том, что библиотека PicklingTools предоставляет вам "python-подобные" структуры данных из С++, чтобы затем сериализовать и десериализовать в/из Python/С++. Поддерживаются все (?) Основные типы: int, long int, string, None, complex, словари, списки, упорядоченные словари и кортежи. Есть несколько крючков для выполнения пользовательских классов, но эта часть немного незрелая: остальная часть библиотеки довольно стабильна и активна в течение 8 (?) Лет.
Простой пример:
#include "chooseser.h"
int main()
{
Val a_dict = Tab("{ 'a':1, 'b':[1,2.2,'three'], 'c':None }");
cout << a_dict["b"][0]; // value of 1
// Dump to a file
DumpValToFile(a_dict, "example.p0", SERIALIZE_P0);
// .. from Python, can load the dictionary with pickle.load(file('example.p0'))
// Get the result back
Val result;
LoadValFromFile(result, "example.p0", SERIALIZE_P0);
cout << result << endl;
}
На веб-сайте имеется дополнительная документация (FAQ и руководство пользователя).
Надеюсь, что это полезно:
Gooday,
Ричи