25

私は以下のコードに取り組んでいます:

#include<iostream>
#include<stdio.h>

using namespace std;

main() {
    unsigned char a;
    a=1;
    printf("%d", a);
    cout<<a;
}

印刷1と若干のゴミです。

なぜcoutそのように振る舞うのですか?

4

5 に答える 5

41

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;
于 2013-03-23T09:42:51.517 に答える
3

aのように整数として型キャストする必要がありますcout<< (int)(a);。これにより、出力を観察でき1ます。を使用cout << a;すると、出力は出力できないSOH (Start of Heading)ascii 値に対応する1ため、いくつかの特殊文字が観察されます。

編集

より正確に言えば、cout声明はcout << static_cast<unsigned>(a)Nawazが言及したとおりでなければなりません。

于 2013-03-23T09:41:42.077 に答える
3

出力のタイプを指定できるため、C コンパイラには、出力される出力のタイプを定義する独自の方法があります。

元:

uint8_t c = 100;
printf("%d",c);

cそのため、int by %d、char %c、string %s、または hex 値として出力することもできます%x

C++ にも独自の方法がある場合、はデフォルトcoutで 8 ビット値を として出力charします。したがって、出力引数で指定子を使用する必要があります。

次のいずれかを使用できます。

  1. +出力引数の名前の前のa

    uint8_t data_byte = 100;
    cout << "val: " << +data_byte << endl;
    
  2. 関数キャストを使用しますunsigned(var)。お気に入り、

     uint8_t data_byte = 100;
     cout << "val: " << unsigned(data_byte) << endl;
    
于 2019-05-25T21:51:30.003 に答える
-3

printf("%u",a); とても簡単です試してみてください

于 2016-05-18T05:27:30.423 に答える