2017-05-04 222 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如上面的代码)