【发布时间】:2015-02-03 17:52:38
【问题描述】:
我正在使用 Qt,我有一个 unsigned char *bytePointer 并想打印出当前字节的数值。下面是我的代码,它旨在给出我从连接到计算机的机器接收到的连续字节的 int 值和十六进制值:
int byteHex=0;
byteHex = (int)*bytePointer;
qDebug << "\n int: " //this is the main issue here.
<< *bytePointer;
std::cout << " (hex: "
<< std::hex
<< byteHex
<< ")\n";
}
这给出了完美的结果,并且我得到了实际的数字,但是这段代码将进入 API,我不想使用 Qt-only 函数,例如 qDebug。所以当我尝试这个时:
int byteHex=0;
byteHex = (int)*bytePointer;
std::cout << "\n int: " //I changed qDebug to std::cout
<< *bytePointer;
std::cout << " (hex: "
<< std::hex
<< byteHex
<< ")\n";
}
输出确实完美地给出了十六进制值,但是 int 值返回符号(如 ☺、└、§ 等)。
我的问题是:如何让std::cout 提供与qDebug 相同的输出?
编辑:由于某种原因,这些符号只出现在特定的 Qt 设置中。我不知道为什么会这样,但现在已经解决了。
【问题讨论】:
-
请注意,这将工作一次,然后
cout卡在十六进制模式,因为你没有重置它。 -
它是 Qt 应用程序吗?如果是,为什么不使用 qDebug?如果没有,你为什么更早使用它?
-
@SebastianRedl 实际上是问题所在。之后我只是没有添加 std::dec 。我很尴尬,但谢谢!
-
@lpapp 现在它在 Qt 中,但我现在将它移动到 Visual Studio,因为它是 API 的一部分。
-
There are tricks and you could also use qInstallMsgHandler。甚至还有一个适用于 Visual Studio 的 Qt 插件,包括 Qt 4 和 Qt 5。你到底面临什么问题?