68
#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(...) は醜く、余分なビットを削除するにはさらに作業が必要です。

4

6 に答える 6

147
char a = 0xab;
cout << +a; // promotes a to a type printable as a number, regardless of type.

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

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

于 2015-02-09T16:42:46.093 に答える
7

多分これ:

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

それが役に立てば幸い。

于 2013-02-01T10:59:12.420 に答える