2017-05-04 78 views
2

我是一名Java程序員,我嘗試使用兩種不同的方法將字節輸出到標準輸出中。將int轉換爲兩個字節的數組

unsigned char bytes[2]; 
//... 
printf("%x%x", bytes[0], bytes[1]); 
std::cout << bytes[0] << bytes[1]; 

但是這些方法的輸出是不同的。爲什麼?如何使printf輸出與std::cout相同?

+4

你的printf調用在降低打印大小寫十六進制(%x),而cout調用正在打印char值。 –

+0

'bytes'是什麼? –

回答

3

std::cout它們將被打印爲字符。

隨着printf整數提升是他們得到的int秒後,與%x符告訴printf以十六進制格式打印unsigned int

你可以printf使用%c打印字符,或者你可以得到std::cout自己做宣傳,並設置hex標誌來打印爲十六進制:

std::printf("%c%c", bytes[0], bytes[1]); 
std::cout << std::hex << +bytes[0] << +bytes[1]; 
1

%x輸出以十六進制CS的數,例如,代碼

int x = 80; 
printf("%x", x); 

將打印50

要以小數形式寫入數字,您必須使用%d。此外,打印char變量的數量,而不是人物的一種形式,你必須將它轉換爲int

unsigned char bytes[2]; 
//... 
printf("%d%d", bytes[0], bytes[1]); 
std::cout << (int)bytes[0] << (int)bytes[1]; 
+0

不同 –

+0

在我的電腦上,這段代碼打印出相同的行(實際上,它們被打印在一行上,但無論如何它們都是相同的)。你的情況打印什麼? – alexeykuzmin0

+0

@ St.Antario:陣列中有什麼? –

1

等效是:

#include <iomanip> // needed for std::hex 

std::cout << std::hex << static_cast<unsigned int>(bytes[0]) << static_cast<unsigned int>(bytes[1]); 

兩點區別:

  • 您的printf%x打印在十六進制 - 對於C++流,有std::hex
  • printf需要int值(%x),但C++流沒有一個operator<<,它打印unsigned char作爲一個整數值(而不是它會被打印成文字),所以你需要轉換unsigned char到整數類型第一(例如。 unsigned int如上面的代碼)