#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(...)は見苦しく、余分なビットを削除するためにより多くの作業が必要です。
_char a = 0xab;
cout << +a; // promotes a to a type printable as a number, regardless of type.
_
これは、型が通常のセマンティクスを持つ単項_+
_演算子を提供する限り機能します。数値を表すクラスを定義する場合、正規のセマンティクスを持つ単項+演算子を提供するには、値または定数への参照のいずれかで_*this
_を返すoperator+()
を作成します。
source: Parashift.com-charを数値として印刷するにはどうすればよいですか?char *を印刷して出力にポインターの数値が表示されるようにするにはどうすればよいですか?
それらを整数型にキャストします(そしてビットマスクを適切に!)、すなわち:
#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;
}
たぶんこれ:
char c = 0xab;
std::cout << (int)c;
それが役に立てば幸い。
別の方法は、casting(int)とは別にstd :: hexを使用することです。
std::cout << std::hex << (int)myVar << std::endl;
役に立てば幸いです。