As you have commented, the reason is that you use cout
to print its content directly. Here I will try to explain to you why this will not work.
cout << bottomRGB[0] << endl;
Why "cout"
works weird for "unsigned char"
?
It will not work because here bottomRGB[0]
is a unsigned char
(with value 218
), 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 218
is non-printable. Check out here for the ASCII table.
P.S. You can check whether bottomRGB[0]
is printable or not using isprint()
as:
cout << isprint(bottomRGB[0]) << endl; // will print garbage value or nothing
It will print 0
(or false
) indicating the character is non-printable
For your example, to make it work, you need to type cast it first before cout
:
cout << (int) bottomRGB[0] << endl; // correctly printed (218 for your example)
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…