int main() {
char k = 0xd8;
cout << hex << k << endl;
}
出于某种原因,打印出的字符格式为k
而不是十六进制形式d8
。做cout << hex << (int) k << endl;
给我ffffd8
这不是我想要的。字符为十六进制,字节大小相同C++
int main() {
char k = 0xd8;
cout << hex << k << endl;
}
出于某种原因,打印出的字符格式为k
而不是十六进制形式d8
。做cout << hex << (int) k << endl;
给我ffffd8
这不是我想要的。字符为十六进制,字节大小相同C++
这只是C++
的许多缺陷之一,也是我坚持使用C
的另一个原因。您可以在下面提供的参考文献中阅读有关该主题的更多信息。为了节省一些麻烦,考虑在生产代码中使用printf()
系列函数,因为修复不能保证符合标准。
代码
#include <iostream>
using namespace std;
int main(void)
{
unsigned char k = 0xd8;
cout << "k = 0x" << hex << +k << endl;
}
样本输出
k = 0xd8
参考
http://cpp.indi.frih.net/blog/2014/08/code-critique-stack-overflow-posters-cant-print-the-numeric-value-of-a-char/
,明确的C++,访问的2015年9月27日http://cpp.indi.frih.net/blog/2014/09/tippet-printing-numeric-values-for-chars-and-uint8_t/
,明确的C++,访问的2015年9月27日另外:'+ k'本质上只是写'(int)k'的一种深奥的方式。 (或者'(unsigned int)k';我不记得那个细节) – Hurkyl
另外,你认为这是不是符合标准?在C++中使用'printf'有很好的理由,但这不是其中之一。 –
http://stackoverflow.com/a/25701418/103167 –
它看起来像你的意思了'k'有型'无符号char'; 'char'可能会被签名,因此不能保证能够存储一个大到0xd8的数字。 – Hurkyl