2014-12-05 108 views
2

我正在使用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设置。我不知道为什么会发生,但现在已经修复。

+1

注意,这将工作一次,然后'cout'是停留在十六进制模式,因为你不复位。 – 2014-12-05 14:34:51

+0

它是一个Qt应用程序吗?如果是的话,为什么不qDebug?如果没有,为什么你更早使用它? – lpapp 2014-12-05 14:38:10

+0

@SebastianRedl实际上是这个问题。之后我只是没有添加std :: dec。我很尴尬,但谢谢你! – 2014-12-05 14:39:27

回答

1

正如其他人在评论中指出,你改变了输出为十六进制,但你实际上并没有将其设置回这里:

std::cout << " (hex: " 
      << std::hex 
      << byteHex 
      << ")\n"; 

您需要事后将此:

std::cout << std::dec; 
+0

Yeaaah是它! – 2014-12-05 14:42:28

1

标准输出流将输出任何字符类型作为字符,而不是数字值。要输出的数值,转换成非字符整数类型:

std::cout << int(*bytePointer); 
+1

或者只是'byteHex'。该变量只是误称。 – 2014-12-05 14:34:31

+0

我认为,因为我在那之后使用了std :: hex,所以出于某种奇怪的原因,它使'* bytePointer'也是一个十六进制值。所以这两个值最终都是十六进制。如果我删除了'std :: hex',它们都变成了整数值。 – 2014-12-05 14:34:48

+0

@SebastianRedl是的,我猜它有点错误;我刚刚命名它,因为这是我将用于十六进制代码的变量。 – 2014-12-05 14:36:15