2014-12-05 109 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