c++如何将16进制数输出_c++ cout hex用法【笔记】

2次阅读

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

c++如何将16进制数输出_c++ cout hex用法【笔记】

如何用 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::setfillstd::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::formatc++20):

std::cout << std::format("0x{:X}", x); // 同样输出 "0xFF"

std::format 在旧编译器上不可用,兼容性不如手动拼接。

最易忽略的是流状态的持久性——std::hex 一旦设置,会影响之后所有整数输出,哪怕跨函数调用。如果只是临时需要十六进制,最好在输出后显式切回 std::dec,否则可能引发下游逻辑误输出。

text=ZqhQzanResources