为什么“cout”对于“unsigned char”来说很奇怪?

问题描述 投票:0回答:1

我有以下代码:

cvtColor (image, image, CV_BGRA2RGB);
Vec3b bottomRGB;
bottomRGB=image.at<Vec3b>(821,1232);

当我显示

bottomRGB[0]
时,它显示的值大于255。这是什么原因?

c++ cout unsigned-char
1个回答
3
投票

正如您所评论的,原因是您使用

cout
直接打印其内容。在这里我将尝试向您解释为什么这行不通。

cout << bottomRGB[0] << endl;

为什么
"cout"
对于
"unsigned char"
来说很奇怪?

它不起作用,因为这里

bottomRGB[0]
是一个
unsigned char
(具有值
218
),
cout
实际上会打印一些 垃圾值(或什么也没有),因为它只是一个 不可打印 ASCII无论如何都会打印出字符。请注意,与
218
对应的 ASCII 字符是不可打印的。查看 here 的 ASCII 表。

附注您可以使用

bottomRGB[0]
 检查 
isprint()
是否可打印:

cout << isprint(bottomRGB[0]) << endl; // will print garbage value or nothing

它将打印

0
(或
false
),表示该字符不可打印


对于您的示例,要使其正常工作,您需要先在

cout
:

之前输入cast it
cout << (int) bottomRGB[0] << endl; // correctly printed (218 for your example) 
© www.soinside.com 2019 - 2024. All rights reserved.