std :: cout给出不同的输出qDebug
我正在使用Qt,并且我有一个unsigned char *bytePointer
并且想要打印出当前字节的数字值。下面是我的代码,这是为了给INT-值和连续字节的十六进制值,我从连接到计算机的机器接收:std :: cout给出不同的输出qDebug
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";
}
输出确实非常给十六进制值,但是整型值返回符号(如☺,└,§,要列出几个)。
我的问题是:我如何获得std::cout
以提供与qDebug
相同的输出?
编辑:由于某些原因符号只出现在某个Qt设置。我不知道为什么会发生,但现在已经修复。
正如其他人在评论中指出,你改变了输出为十六进制,但你实际上并没有将其设置回这里:
std::cout << " (hex: "
<< std::hex
<< byteHex
<< ")\n";
您需要事后将此:
std::cout << std::dec;
Yeaaah是它! – 2014-12-05 14:42:28
标准输出流将输出任何字符类型作为字符,而不是数字值。要输出的数值,转换成非字符整数类型:
std::cout << int(*bytePointer);
或者只是'byteHex'。该变量只是误称。 – 2014-12-05 14:34:31
我认为,因为我在那之后使用了std :: hex,所以出于某种奇怪的原因,它使'* bytePointer'也是一个十六进制值。所以这两个值最终都是十六进制。如果我删除了'std :: hex',它们都变成了整数值。 – 2014-12-05 14:34:48
@SebastianRedl是的,我猜它有点错误;我刚刚命名它,因为这是我将用于十六进制代码的变量。 – 2014-12-05 14:36:15
注意,这将工作一次,然后'cout'是停留在十六进制模式,因为你不复位。 – 2014-12-05 14:34:51
它是一个Qt应用程序吗?如果是的话,为什么不qDebug?如果没有,为什么你更早使用它? – lpapp 2014-12-05 14:38:10
@SebastianRedl实际上是这个问题。之后我只是没有添加std :: dec。我很尴尬,但谢谢你! – 2014-12-05 14:39:27