这个问题源于我最近遇到的一个错误。我想把一些整数值以十六进制的形式保存在文件中。例如,我应该这样做:
cout << std::hex << value << endl; // (1)
但是出于疏忽,我把它使用成了以下形式:
cout << std::ios::hex << value << endl; // (2)
编译器没有报错,但显然结果不正确。我随机尝试了几个值,似乎(2)实际上给出了部分正确的结果,只是它会将800附加为前缀。我不明白800来自哪里,也找不到好的参考。有人能解释一下发生了什么吗?
cout << std::hex << 255 << endl; // output: FF
cout << std::ios::hex << 255 << endl; // output: 800ff
cout << std::hex << 135 << endl; // output: 87
cout << std::ios::hex << 135 << endl; // output: 80087
cout << std::hex << 11 << endl; // output: b
cout << std::ios::hex << 11 << endl; // output: 800b