опции сериализации c ++ - PullRequest
       4

опции сериализации c ++

0 голосов
/ 22 сентября 2011

Я работаю в проекте, где пишу плагин для определенного пакета.

Этот пакет реализует «новый» метод в одном из своих заголовков, и поэтому я не могуinclude <strstream>, поскольку он также реализует "new".

В пакет sdk также входит прореженная и очень старая версия boost, что означает, что я не могу использовать классы boost-сериализации.Он построен на Qt для VS2008, и мы (для этого проекта) должны быть в VS2005, поэтому я тоже не могу включить Qt.

Мне нужно иметь возможность получать данные из приложения, работающего извне, отправив данные по TCPIP.Каков наилучший способ для меня сериализовать данные из источника и прочитать их обратно с этими ограничениями?

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

Спасибо, Лирон

Ответы [ 3 ]

3 голосов
/ 22 сентября 2011
0 голосов
/ 22 сентября 2011

Вы можете извлечь байты из ваших данных и передать их, см. Базовый пример.

QByteArray vectorToBin(const QVector<qint32> & vec)
{
    size_t size = sizeof(qint16);
    QByteArray result;
    foreach(qint16 e, vec) {
        for(int n = 0; n<=(size-1)*8; n+=8) {
            char c = static_cast<char>((e >> n));
            result.append(c);
        }
    }
    return result;
}

QVector<qint32> binToVector(const QByteArray & bytes)
{
    QVector<qint32> result;
    size_t size = sizeof(qint16);
    for(int i=0; i<bytes.size(); i+=size) {
        qint16 e = ((bytes[i+1] & 0xff)<<8) | (bytes[i] & 0xff);
        result << e;
    }
    return result;
} 
0 голосов
/ 22 сентября 2011

boost.serialization - это путь сюда.Это самая понятная библиотека сериализации для C ++, которую я знаю, и она поддерживает стандартные контейнеры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...