私は以下のコードに取り組んでいます:
#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(read: )が印刷されます。false
--
とにかく、あなたもcout印刷したい場合は1、これにキャストaしてください:
cout << static_cast<unsigned>(a) << std::endl;
aのように整数として型キャストする必要がありますcout<< (int)(a);。これにより、出力を観察でき1ます。を使用cout << a;すると、出力は出力できないSOH (Start of Heading)ascii 値に対応する1ため、いくつかの特殊文字が観察されます。
編集:
より正確に言えば、cout声明はcout << static_cast<unsigned>(a)Nawazが言及したとおりでなければなりません。
出力のタイプを指定できるため、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); とても簡単です試してみてください