2014-08-30 68 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

过得好打包数据?您可能也想要包含该代码。 – 2014-08-30 21:53:53

+0

我使用32个字符或更高的密钥创建了一个字符串,并使用packer.pack()函数将其打包并比我想通过套接字将其发送到另一个在PHP上运行的套接字。 sbuffer只包含'da'的问题 – nosvad 2014-08-30 22:33:48

回答

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 2014-08-30 22:50:52

+0

检查并确保您使用的编译器标志用于构建图书馆。如果它们在很大程度上有所不同,它会导致代码和库之间的对象布局不同。这会影响访问对象中的错误数据。 – 2014-08-30 23:35:20

+0

@nosvad你是如何建立图书馆的?你使用什么版本? – 2014-08-31 00:34:13