1

我面临一个奇怪的问题,在我的 mac osx lion 上工作(在 xcode4/clang 下,虽然它可以用 gcc4.2 重现)。

看来,我不能为 unsigned char 变量分配高于 127 的任何值。所以,当我分配

v = (unsigned char) 156;

或者,简单地说

std::cout << (unsigned char) 231 << std::endl;

我的程序不产生任何输出。

当我运行这段代码

std::cout << "Unsigned chars range up to " << UCHAR_MAX << std::endl;

我得到以下输出:

无符号字符范围高达 255

但是,当我运行这样的东西时,程序每次都会生成高达一些不同的任意值(例如 c = 114、c = 252 等)的输出。for(unsigned char c = 0; c < CHAR_MAX; c++) std::cout << "c = " << 2*c << std::endl;

将 CHAR_MAX 更改为 UCHAR_MAX,程序再次结束而没有输出:(

提前致谢

4

3 回答 3

2

cout正在将数值转换为字符集中的字符(嗯,它正在尝试......当您看不到任何内容时,它不是您的字符集的有效字符,从技术上讲,它是决定这一点的终端)。

改为投射unsigned int

编辑添加: ildjarn 在他对您的问题的评论中提出了非常有效的观点;如果您在调试器中运行它,您会看到该值确实是您所期望的。

于 2012-02-14T19:52:00.817 回答
0

您希望看到什么符号来代表角色(unsigned char)231?在大多数系统上,这些是扩展字符,需要特殊的终端设置才能显示为任何连贯的内容,即使是可见的。

试试这个:

unsigned char testChar = (unsigned char)231;
unsigned int testInt = (unsigned int)testChar;
std::cout << testInt << std::endl;
于 2012-02-14T19:54:17.357 回答
0

的值unsigned char不限于 127,但标准ASCII只有 7 位(所以 128 个值)。任何高于 127 的值都不代表任何字符(除非您使用某种扩展的 ASCII),因此不会打印任何内容。

于 2012-02-14T19:56:52.503 回答