std::cout は unsigned char 型データを出力します

C++ コードを記述する場合、char、float、int、double などの型を出力するのが通常ですが、unsigned char に遭遇すると文字化けが出力されることがあります。
したがって、自分でテストしてください。

int main(int argc, char** argv)
{
    
    
	std::cout << "test for uchar" << std::endl;
	int h = 255;
	//unsigned char u = (unsigned char)(h);

	unsigned char u = '255';
	char c = 'a';
	float f = 1.0f;
	double d = 1.0f;
	int i = 1;

	std::cout << "unsigned char: " << u << std::endl;
	std::cout << "char: " << c << std::endl;
	std::cout << "float: " << f << std::endl;
	std::cout << "double: " << d << std::endl;
	std::cout << "int: " << i << std::endl;
}

出力は正常です。
ここに画像の説明を挿入

代入方法で値を指定する場合、unsigned char は通常 0 ~ 255 の範囲になります。

int main(int argc, char** argv)
{
    
    
	std::cout << "test for uchar" << std::endl;
	int h = 255;
	unsigned char u = (unsigned char)(h);

	//unsigned char u = '255';
	char c = 'a';
	float f = 1.0f;
	double d = 1.0f;
	int i = 1;

	std::cout << "unsigned char: " << u << std::endl;
	std::cout << "char: " << c << std::endl;
	std::cout << "float: " << f << std::endl;
	std::cout << "double: " << d << std::endl;
	std::cout << "int: " << i << std::endl;
}

結果の出力はガベージ値です。
ここに画像の説明を挿入
ここでは u(unsigned char) が unsigned char (値 255) であるため、これは機能しません。cout は実際には、単なる印刷不可能な ASCII 文字であるため、ガベージ値 (または何も表示されません) を出力します。とにかく印刷されます。255 に対応する ASCII 文字は印刷できないことに注意してください。ASCII テーブルについては、ここをチェックしてください。PS 上記の意味
のように、isprint() を使用して、u が印刷可能かどうかを確認できます
。指定された場合、これは ASCII 範囲を超えますが出ているので印刷できないか、ガベージ値です。

最終テスト:
u に通常の正常値が与えられた場合、97 は 'a' に対応し、出力は 'a' になります。テスト結果は次のとおりです: テスト
コード:

int main(int argc, char** argv)
{
    
    
	std::cout << "test for uchar" << std::endl;
	int h = 97;
	unsigned char u = (unsigned char)(h);

	//unsigned char u = '255';
	char c = 'a';
	float f = 1.0f;
	double d = 1.0f;
	int i = 1;

	std::cout << "unsigned char: " << u << std::endl;
	std::cout << "char: " << c << std::endl;
	std::cout << "float: " << f << std::endl;
	std::cout << "double: " << d << std::endl;
	std::cout << "int: " << i << std::endl;
}

テスト結果
ここに画像の説明を挿入
そのため、 std::cout が出ないときは int への強制変換を使えば cout で大丈夫です。
コードは以下のように表示されます。

int main(int argc, char** argv)
{
    
    
	std::cout << "test for uchar" << std::endl;
	int h = 255;
	unsigned char u = (unsigned char)(h);

	//unsigned char u = '255';
	char c = 'a';
	float f = 1.0f;
	double d = 1.0f;
	int i = 1;

	std::cout << "unsigned char: " << (int)u << std::endl;
	std::cout << "char: " << c << std::endl;
	std::cout << "float: " << f << std::endl;
	std::cout << "double: " << d << std::endl;
	std::cout << "int: " << i << std::endl;
}

テスト結果:
ここに画像の説明を挿入
次の資料を参照:
https://www.it1352.com/457126.html

おすすめ

転載: blog.csdn.net/weixin_43851636/article/details/110552887