今天在项目中,使用protobuf进行解包时,发现解包失败。查了半天,发现是因为传参数的时候,类型转换出现问题。
bool ParseFromString(string ),函数原型是这样,而自己进行解包时,
char *pData;//这个是包缓冲
int iPkg;
bool bRet = ParseFromString(pData);
if (bRet)
{
}
else
{
//错误
}
问题出现在这里了。当把char*传入ParseFromString时,会把char*转换成string类型,会在第一个'\0'的地方,把这个缓冲区给截断,问题就出现在这里了。
正确的做法如下:
char *pData;//这个是包缓冲
int iPkg;
string strData(pData, len);
bool bRet = ParseFromString(strData);
解包正确!
作为经验,记下这个错误!