我是一名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'是什么? –