我正面临一个奇怪的问题,在我的mac osx lion上工作(在xcode4 / clang下,虽然它可以用gcc4.2重现)。
似乎我无法为无符号的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&lt; CHAR_MAX; c ++) std :: cout&lt;&lt; “c =”&lt;&lt; 2 * c&lt;&lt;的std :: ENDL;
将CHAR_MAX更改为UCHAR_MAX,程序结束时不再输出:(
提前致谢
答案 0 :(得分:2)
cout
正在将数值转换为字符集中的字符(嗯,它正在尝试...当你没有看到任何东西时它不是你字符集的有效字符,从技术上来说它就是终端那是决定这个)。
将其转换为unsigned int
。
编辑添加: ildjarn在他对您的问题的评论中提出了一个非常有效的观点;如果你在调试器中运行它,你会发现该值确实是你所期望的。
答案 1 :(得分:0)
您希望看到哪个符号代表字符(unsigned char)231
?在大多数系统中,这些是需要特殊终端设置的扩展字符,即使可见也会显示为连贯的任何内容。
试试这个:
unsigned char testChar = (unsigned char)231;
unsigned int testInt = (unsigned int)testChar;
std::cout << testInt << std::endl;
答案 2 :(得分:0)
unsigned char
的值不限于127,但标准ASCII仅为7位(因此为128个值)。高于127的任何值都不代表任何字符(除非您使用某种extended ASCII),因此不会打印任何字符。