私は以下のコードに取り組んでいます:
#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); とても簡単です試してみてください