web-dev-qa-db-ja.com

coutを通じて文字を整数として出力する方法は?

#include <iostream>

using namespace std;

int main()
{  
    char          c1 = 0xab;
    signed char   c2 = 0xcd;
    unsigned char c3 = 0xef;

    cout << hex;
    cout << c1 << endl;
    cout << c2 << endl;
    cout << c3 << endl;
}

出力は次のようになります。

ab
cd
ef

それでも、何も得られませんでした。

これは、coutが常に「char」、「signed char」、および「unsigned char」を8ビット整数ではなく文字として扱うためだと思います。ただし、「char」、「signed char」、および「unsigned char」はすべて整数型です。

だから私の質問は次のとおりです:coutを通じて文字を整数として出力する方法は?

PS:static_cast(...)は見苦しく、余分なビットを削除するためにより多くの作業が必要です。

51
xmllmx
_char a = 0xab;
cout << +a; // promotes a to a type printable as a number, regardless of type.
_

これは、型が通常のセマンティクスを持つ単項_+_演算子を提供する限り機能します。数値を表すクラスを定義する場合、正規のセマンティクスを持つ単項+演算子を提供するには、値または定数への参照のいずれかで_*this_を返すoperator+()を作成します。

source: Parashift.com-charを数値として印刷するにはどうすればよいですか?char *を印刷して出力にポインターの数値が表示されるようにするにはどうすればよいですか?

95
ngwdaniel

それらを整数型にキャストします(そしてビットマスクを適切に!)、すなわち:

#include <iostream>

using namespace std;

int main()
{  
    char          c1 = 0xab;
    signed char   c2 = 0xcd;
    unsigned char c3 = 0xef;

    cout << hex;
    cout << (static_cast<int>(c1) & 0xFF) << endl;
    cout << (static_cast<int>(c2) & 0xFF) << endl;
    cout << (static_cast<unsigned int>(c3) & 0xFF) << endl;
}
9
sheu

たぶんこれ:

char c = 0xab;
std::cout << (int)c;

それが役に立てば幸い。

6
Luka Pivk

別の方法は、casting(int)とは別にstd :: hexを使用することです。

std::cout << std::hex << (int)myVar << std::endl;

役に立てば幸いです。

0
omotto

どうですか:

char c1 = 0xab;
std::cout << int{ c1 } << std::endl;

簡潔で安全です。 produces 他のメソッドと同じマシンコード。

0
mt3d