std::cout 輸出 unsigned char型別資料

夕陽染色的坡道發表於2020-12-03

寫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;
}

輸出的結果為垃圾值:
在這裡插入圖片描述
It will not work because here u(unsigned char) is a unsigned char (with value 255), cout actually will print some garbage value (or nothing) as it is just a non-printable ASCII character which is getting printed anyway. Note that ASCII character corresponding to 255 is non-printable. Check out here for the ASCII table.
P.S. You can check whether u is printable or not using isprint() as
上面的意思是:當賦予這個超過了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

相關文章