我正在编写以下代码:
#include<iostream>
#include<stdio.h>
using namespace std;
main() {
unsigned char a;
a=1;
printf("%d", a);
cout<<a;
}
Run Code Online (Sandbox Code Playgroud)
它打印1和一些垃圾.
为什么cout
表现如此?
Naw*_*waz 31
cout << a
正在打印一个看似垃圾的值.实际上它不是垃圾.它只是一个不可打印的 ASCII字符,无论如何都要打印出来.请注意,对应的ASCII字符1
是不可打印的.您可以检查是否a
可打印,std::isprint
如下所示:
std::cout << std::isprint(a) << std::endl;
Run Code Online (Sandbox Code Playgroud)
它将打印0
(读取false
:),表示该字符不可打印
-
无论如何,如果你想要你cout
也打印1
,那么转换a
为:
cout << static_cast<unsigned>(a) << std::endl;
Run Code Online (Sandbox Code Playgroud)
我在这里有一个我早已忘记的类似问题。解决此问题的方法iostream's
cout
可以这样完成:
#include<iostream>
#include<stdio.h>
main() {
unsigned char a;
a=1;
printf("%d", a);
std::cout<< +a << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果要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)
纳瓦兹所说的那样。
归档时间: |
|
查看次数: |
48581 次 |
最近记录: |