数组声明为 unsigned char 时的垃圾值

Posted

技术标签:

【中文标题】数组声明为 unsigned char 时的垃圾值【英文标题】:Garbage values when array declared as unsigned char 【发布时间】:2012-02-18 06:27:56 【问题描述】:

当一个数组被声明为 unsigned char 并使用 0x00-0xff 范围内的值初始化并使用 cout 打印时,我得到如下垃圾值

+   (   �           
~   �   �   �   
    �       O   
    �   �   <   

我可以知道如何使用单字节的数字,但能够使用 cout 吗?

【问题讨论】:

能否同时看到初始化代码和打印代码? 您正在尝试打印不可打印的字符。 【参考方案1】:

因为它是一个unsigned charstd::cout 正在将它们传递给终端并且它被显示为一个字符集(好吧,无论如何尝试 - 这些值超出了您的字符集的有效可打印字符范围'重新使用)。

使用cout 输出时转换为unsigned int

【讨论】:

【参考方案2】:

字符类型默认显示为字符。如果您希望它们显示为整数,则必须先转换它们:

unsigned char value = 42;
std::cout << static_cast<unsigned int>(value);

【讨论】:

【参考方案3】:

那些不是垃圾值。这些就是角色所代表的。要将其打印为 int,只需在输出时转换为 unsigned int

cout << (unsigned int) some_char;

【讨论】:

以上是关于数组声明为 unsigned char 时的垃圾值的主要内容,如果未能解决你的问题,请参考以下文章

C++怎么将 CString 转换成 unsigned char 的数组

从字符串转换为 unsigned char* 会留下垃圾

unsigned char 到 8 个原始位的 unsigned char 数组

char* 数组出现“多个定义”错误,但 unsigned char 数组不出现

将值分配给二维数组时的垃圾值

如何将 unsigned char 值表示为十六进制字符串?