如何使用A-F(而不是a-f)传输十六进制数字?

时间:2010-11-07 09:23:23

标签: c++ hex iostream iomanip

是否可以使ostream输出带字符A-F而不是a-f的十六进制数字?

int x = 0xABC;
std::cout << std::hex << x << std::endl;

这会输出abc,而我希望看到ABC

2 个答案:

答案 0 :(得分:12)

是的,您可以使用std::uppercase,这会影响浮点和十六进制整数输出:

std::cout << std::hex << std::uppercase << x << std::endl;

如以下完整程序:

#include <iostream>
#include <iomanip>

int main (void) {
    int x = 314159;
    std::cout << std::hex << x << " " << std::uppercase << x << std::endl;
    return 0;
}

输出:

4cb2f 4CB2F

答案 1 :(得分:1)

在 C++20 中,您将能够使用 std::format 来执行此操作:

std::cout << std::format("{:X}\n", 0xABC);  

输出:

ABC

在此期间您可以使用 the {fmt} librarystd::format 是基于。 {fmt} 还提供了 print 函数,使这变得更加简单和高效 (godbolt):

fmt::print("{:X}\n", 0xABC); 

免责声明:我是 {fmt} 和 C++20 std::format 的作者。