Qt QString().sprintf(“%x“)解决打印无符号十六位数

场景:

最近使用海康工业相机的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( ),遂改之,完美解决!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值