我是一名Java程序員,我嘗試使用兩種不同的方法將字節輸出到標準輸出中。將int轉換爲兩個字節的數組
unsigned char bytes[2];
//...
printf("%x%x", bytes[0], bytes[1]);
std::cout << bytes[0] << bytes[1];
但是這些方法的輸出是不同的。爲什麼?如何使printf輸出與std::cout
相同?
我是一名Java程序員,我嘗試使用兩種不同的方法將字節輸出到標準輸出中。將int轉換爲兩個字節的數組
unsigned char bytes[2];
//...
printf("%x%x", bytes[0], bytes[1]);
std::cout << bytes[0] << bytes[1];
但是這些方法的輸出是不同的。爲什麼?如何使printf輸出與std::cout
相同?
與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];
%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];
不同 –
在我的電腦上,這段代碼打印出相同的行(實際上,它們被打印在一行上,但無論如何它們都是相同的)。你的情況打印什麼? – alexeykuzmin0
@ St.Antario:陣列中有什麼? –
等效是:
#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
如上面的代碼)
你的printf調用在降低打印大小寫十六進制(%x),而cout調用正在打印char值。 –
'bytes'是什麼? –