使用 std::hex 操纵符可使 cout 输出十六进制数(不带前缀),如 int x = 255; std::cout

如何用 cout 输出十六进制数(不带前缀)
默认情况下,cout 输出整数是十进制。要切到十六进制,需配合 std::hex 流操纵符:
int x = 255; std::cout << std::hex << x; // 输出 "ff"注意:
std::hex 是**状态切换**,一旦设置,后续所有整数输出都会按十六进制,直到被其他进制操纵符(如 std::dec)覆盖。
如何输出大写十六进制(A-F 而非 a-f)
仅用 std::hex 默认输出小写字母。要转大写,必须额外加上 std::uppercase:
int x = 255; std::cout << std::hex << std::uppercase << x; // 输出 "FF"顺序无关紧要,但两者都得显式写出;漏掉
std::uppercase 就永远是小写。
如何补零并固定宽度(比如输出 4 位:00FF)
补零靠 std::setfill 和 std::setw,但要注意:它们只对**下一个输出项**生效,且 std::setw 不影响进制切换本身:
#include常见错误:int x = 255; std::cout << std::hex << std::uppercase << std::setfill('0') << std::setw(4) << x; // 输出 "00FF"
- 忘了
#include→ 编译失败 - 把
std::setw放在std::hex前面 → 无效(它只修饰紧随其后的输出) - 重复使用同一
std::setw→ 只对下一次输出起作用,之后需重设
如何输出带 0x 前缀的十六进制
std::hex 本身不加前缀。要输出 0x,只能手动拼接:
int x = 255; std::cout << "0x" << std::hex << std::uppercase << x; // 输出 "0xFF"没有内置操纵符能自动加前缀;若用
printf 风格,可考虑 std::format(C++20):std::cout << std::format("0x{:X}", x); // 同样输出 "0xFF"但 std::format 在旧编译器上不可用,兼容性不如手动拼接。
最易忽略的是流状态的持久性——std::hex 一旦设置,会影响之后所有整数输出,哪怕跨函数调用。如果只是临时需要十六进制,最好在输出后显式切回 std::dec,否则可能引发下游逻辑误输出。











