我正在处理以下代码:
#include<iostream>
#include<stdio.h>
using namespace std;
main() {
unsigned char a;
a=1;
printf("%d", a);
cout<<a;
}
它正在打印 1 和一些垃圾。
为什么cout
会有这样的行为?
我正在处理以下代码:
#include<iostream>
#include<stdio.h>
using namespace std;
main() {
unsigned char a;
a=1;
printf("%d", a);
cout<<a;
}
它正在打印 1 和一些垃圾。
为什么cout
会有这样的行为?
cout << a
正在打印一个对您来说似乎是垃圾的值。其实不是垃圾。它只是一个不可打印的ASCII 字符,无论如何都会被打印出来。请注意,对应的 ASCII 字符1
是不可打印的。您可以检查是否a
可打印,std::isprint
如:
std::cout << std::isprint(a) << std::endl;
它将打印0
(读取false
:)指示字符不可打印
--
无论如何,如果您还想cout
打印1
,请转换a
为:
cout << static_cast<unsigned>(a) << std::endl;
我在这里有一个类似的问题,我早就忘记了。可以这样解决这个问题iostream's
cout
:
#include<iostream>
#include<stdio.h>
main() {
unsigned char a;
a=1;
printf("%d", a);
std::cout<< +a << std::endl;
return 0;
}
如果要cout
打印unsigned char
值而不是ascii
字符,而不是将其转换回另一种类型。你需要promote
它。
如果你注意到我所做的只是+
在unsigned char
. 这是一元加法,它将促进unsigned char
为您提供实际的数字表示。
用户 Baum mit Augen 负责提醒我这个解决方案。
您需要将a
整数类型转换为cout<< (int)(a);
. 有了这个,您将观察1
输出。使用cout << a;
,打印将SOH (Start of Heading)
对应无法打印的 ascii 值,1
因此会观察到一些特殊字符。
编辑:
更准确地说,该cout
声明应cout << static_cast<unsigned>(a)
如纳瓦兹所说。
C 编译器有自己的方式来定义打印输出的类型,因为您可以指定输出的类型。
前任:
uint8_t c = 100;
printf("%d",c);
因此您也可以打印c
为 int by %d
、char %c
、string%s
或 hex 值%x
。
C++ 也有自己的方式,默认情况下cout
打印 8 位值char
。因此,您必须在输出参数中使用说明符。
您可以使用:
a+
在输出参数的名称之前
uint8_t data_byte = 100;
cout << "val: " << +data_byte << endl;
使用函数转换unsigned(var)
;喜欢,
uint8_t data_byte = 100;
cout << "val: " << unsigned(data_byte) << endl;
printf("%u",a); 这么简单试试