osx lion上的unsigned char限制为127?

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

看来,我无法为无符号字符变量赋值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,程序结束时不再输出:(

提前致谢


cout正在将数字值转换为字符集中的字符(嗯,它试图......当你没有看到它对你的字符集来说不是一个有效的字符时,并且从技术上讲它是决定这个的终端)。

将其转换为unsigned int

编辑补充: ildjarn在他对你的问题的评论中提出了一个非常有效的观点; 如果你在调试器中运行它,你会发现这个值确实是你所期望的。


你期望看到什么符号来表示字符(unsigned char)231 ? 在大多数系统中,这些是需要特殊终端设置的扩展字符,如果甚至可见,则显示为任何连贯的字符。

尝试这个:

unsigned char testChar = (unsigned char)231;
unsigned int testInt = (unsigned int)testChar;
std::cout << testInt << std::endl;

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

链接地址: http://www.djcxy.com/p/86959.html

上一篇: unsigned char limited to 127 on osx lion?

下一篇: gettime() CUDA