Tokyo Cabinet 能否把struct或class作为value?

OSC管理员 发布于 2011/10/25 22:34
阅读 399
收藏 0
TCXSTR怎么用?

Value可以是struct吗?
CUserInfoMsg *pUser=new CUserInfoMsg;
sprintf(pUser->m_szCaller,"%d",caller);
sprintf(pUser->m_szCalled,"%d",called);

if(!tchdbput2(hdb, pUser->m_szCaller, (char*)pUser)){
	ecode = tchdbecode(hdb);
	fprintf(stderr, "put error: %s\n", tchdberrmsg(ecode));
	delete pUser;
}

加载中
0
游而不击
游而不击
可能需要序列化
0
OSC管理员
OSC管理员

引用来自“冰的斌”的答案

可能需要序列化

请教如何序列化?我需要将value设置为二进制数据:

class CUserInfo : public CMsg
{
public:

    CUserInfo() {}

    ~CUserInfo() {}

    char     m_szCaller[LENGTH24];
    char     m_szCalled[LENGTH24];
    uint16_t m_uiCallerCarrierID;
    uint16_t m_uiCalledCarrierID;
    uint32_t m_uiTime;
};

刚测试了下:

        struct aa{
                char a[10];
                char b;
                char c[10];
        }info;

赋值时将a[10]赋长度为10的字符串,存入hash数据库后能正常返回,若赋值长度<10,则存入数据库后不能正常取出 b 和 c[10]的值。

0
pizigou
pizigou
存结构体之类的进去,需要自己负责计算出真实的长度,这个会受对齐的影响。所谓序列化,是你自己定义一个格式,比如 strut info 序列化为 21个char,然后按你定的顺序放进去,最后再自己反解回来成为结构体。这个如果你做过二进制文件存储就是一样的道理。
返回顶部
顶部