我正在处理以下代码:
#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); 这么简单试试