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