Этот вопрос исходит из ошибки, с которой я недавно столкнулся. Я пытался сохранить некоторые целочисленные значения для файла как hex. В качестве примера, это то, что я должен сделать:
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