场景:
最近使用海康工业相机的SDK进行二次开发,打印出来的函数返回错误码总是怪怪的,和开发手册里的对不上号,其实就是无符号十六位被Qt默认转成了int型,然后传到QString
代码:
在MFC的Demo里他是这么写的:
cstrInfo.Format(_T("Get hight failed! err code:%#x"), nRet);
而我是这么写的:
QString("%1 = Fail error code:%2").arg(str).arg(nRet);
打印结果很残酷,转成十六进制数我甚至在错误码定义里找不到对应项!
于是我用arg做了一下进制转换:
QString("%1 = Fail error code:%2").arg(str).arg(nRet, 0, 16);
打印出来的确实是十六进制的数,可是低八位正常,高八位全是‘f’,试着用QLatin1()去补缺位,也还是不行,看着难受。
接着我试着用 std::printf( ) 去打印:
// printf要求字符串是char *型,直接用QString会无法编译
std::printf("%s = Fail error code:%x", str.toLocal8Bit().data(), nRet);
打印结果是OK的!可是这只是打印输出信息,我其他弹窗接口、Log接口都把QString改成std::printf的话岂不是很麻烦啊!
不急,百度里学了一招:
QString().sprintf("%s = Fail error code:%x", str.toLocal8Bit().data(), nRet);
这时问题基本解决,只是编译器会在sprintf下面提示说这个写法不推荐,建议改用asprintf( ),遂改之,完美解决!