2014-08-30 2 views
2

Я хочу упаковать строку, которая превышает 32 символа, но пакер возвращается каждый раз «da».MsgPack C++ упаковка строки длиной более 32 символов [Ubuntu]

Когда я использую строку, содержащую менее 32 символов, все работает нормально! Но большая строка возврат только 'да'

мой код выглядит следующим образом:

msgpack::sbuffer sbuffer; 
msgpack::packer<msgpack::sbuffer> packer(&sbuffer); 

packer.pack(string("hello this is a string larger than 32 bytes")); 

также попытался это:

packer.pack_raw(43); 
packer.pack_raw_body("hello this is a string larger than 32 bytes", 43); 

В обоих случаях возврата:

'da' 

Есть идеи?

спасибо за помощь

редактировать: Я исправил эту проблему ... я заново установил его с CMake и теперь он работает. Перед тем как я сделал это с ./configure

+0

Как вы получаете упакованные данные? Возможно, вы захотите включить этот код. –

+0

Я создаю строку с ключом, 32 символа или выше, и используйте функцию packer.pack() для ее упаковки, а затем я хочу отправить ее сокетом в другой сокет, работающий на php. проблема в том, что sbuffer содержит только «da» – nosvad

ответ

1

Я попытался следующий код и был в состоянии получить строку:

// main.cpp 
#include <iostream> 
#include <string> 
#include <vector> 
#include <msgpack.hpp> 

int main(int argc, char const *argv[]) 
{ 

    msgpack::sbuffer sbuf; 
    msgpack::packer<msgpack::sbuffer> packer(&sbuf); 

    packer.pack_raw(43); 
    packer.pack_raw_body("hello this is a string larger than 32 bytes", 43); 

    msgpack::unpacked msg; 
    msgpack::unpack(&msg, sbuf.data(), sbuf.size()); 
    msgpack::object obj = msg.get(); 

    std::cout << obj << std::endl; 

    return 0; 
} 

Составлено с g++ main.cpp -o main -lmsgpack

+0

попробовал его с тем же кодом, который вы написали, и все тот же вывод ... consol печатает только «da» – nosvad

+0

Проверьте и убедитесь, что используете одни и те же флаги компилятора, используемые для создания библиотека. Если они различны каким-либо значительным образом, это может привести к тому, что расположение объектов будет отличаться между вашим кодом и библиотекой. Это повлияет на доступ к неправильным данным в объекте. –

+0

@nosvad Как вы строите библиотеку? Какую версию ты используешь? –