C++ 计算十六进制值?
我想做:
int a = 255;
cout << a;
并让它在输出中显示 FF,我该怎么做?
I want to do:
int a = 255;
cout << a;
and have it show FF in the output, how would I do this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(11)
使用:
有许多其他选项来控制输出数字的精确格式,例如前导零和大写/小写。
Use:
There are many other options to control the exact formatting of the output number, such as leading zeros and upper/lower case.
要操纵流以十六进制打印,请使用
hex
操纵器:默认情况下,十六进制字符以小写形式输出。 要将其更改为大写,请使用
uppercase
操纵器:稍后要将输出更改回小写,请使用
nouppercase
操纵器:To manipulate the stream to print in hexadecimal use the
hex
manipulator:By default the hexadecimal characters are output in lowercase. To change it to uppercase use the
uppercase
manipulator:To later change the output back to lowercase, use the
nouppercase
manipulator:std::hex
在
中定义,由
包含。 但是要使用诸如std::set precision/std::setw/std::setfill
/etc 之类的东西,您必须包含
。std::hex
is defined in<ios>
which is included by<iostream>
. But to use things likestd::setprecision/std::setw/std::setfill
/etc you have to include<iomanip>
.如果您想打印单个十六进制数字,然后恢复为十进制,您可以使用以下命令:
If you want to print a single hex number, and then revert back to decimal you can use this:
我知道这不是 OP 所要求的,但我仍然认为值得指出如何使用 printf 来做到这一点。 我几乎总是更喜欢使用它而不是 std::cout (即使没有以前的 C 背景)。
'2' 定义精度,'X' 或 'x' 定义大小写。
I understand this isn't what OP asked for, but I still think it is worth to point out how to do it with printf. I almost always prefer using it over std::cout (even with no previous C background).
'2' defines the precision, 'X' or 'x' defines case.
std::hex
为您提供十六进制格式,但它是一个有状态选项,这意味着您需要保存和恢复状态,否则它将影响所有未来的输出。天真地切换回
std::dec
仅当标志之前所在的位置是好的,但情况可能并非如此,特别是在您正在编写库时。这结合了 Greg Hewgill 的答案和另一个问题中的信息。
std::hex
gets you the hex formatting, but it is a stateful option, meaning you need to save and restore state or it will impact all future output.Naively switching back to
std::dec
is only good if that's where the flags were before, which may not be the case, particularly if you're writing a library.This combines Greg Hewgill's answer and info from another question.
C++20
std::format
在我看来,这是现在最干净的方法,因为它不会污染
std::cout
状态std::hex
:main.cpp
预期输出:
尚未在 GCC 10.0.1、Ubuntu 20.04 上实现。
但是这个很棒的库变成了 C++20,并且在 Ubuntu 22.04 上安装后应该是一样的:
或者:
main2.cpp
编译并运行:
记录在:
更多信息,请访问: std::string 格式如 sprintf
Pre-C++ 20: 干净地打印并恢复
std::cout
到之前的状态main.cpp
编译并运行:
输出:
更多详细信息: 操作后恢复 std::cout 的状态
在 GCC 10.0.1、Ubuntu 20.04 上测试。
C++20
std::format
This is now the cleanest method in my opinion, as it does not pollute
std::cout
state withstd::hex
:main.cpp
Expected output:
Not yet implemented on GCC 10.0.1, Ubuntu 20.04.
But the awesome library that became C++20 and should be the same worked once installed on Ubuntu 22.04 with:
or:
main2.cpp
Compile and run:
Documented at:
More info at: std::string formatting like sprintf
Pre-C++20: cleanly print and restore
std::cout
to previous statemain.cpp
Compile and run:
Output:
More details: Restore the state of std::cout after manipulating it
Tested on GCC 10.0.1, Ubuntu 20.04.
在 C++23 中,您可以使用
std::print
< /a> 来执行此操作:此方法比使用 I/O 操纵器更快、更简洁,并且不会影响全局格式化状态。 您还可以打印到
cout
,尽管这会失去一些性能优势。在
std::print
广泛使用之前,您可以使用{fmt} 库,它基于(godbolt):免责声明:我我是 {fmt} 和 C++23
std::print
的作者。In C++23 you can use
std::print
to do this:This method is faster, less verbose than using I/O manipulators and doesn't affect the global formatting state. You can also print to
cout
although this will loose some of the perf benefits.Until
std::print
is widely available you can use the {fmt} library, it is based on (godbolt):Disclaimer: I am the author of {fmt} and C++23
std::print
.有不同种类的旗帜和旗帜。 您也可以使用面膜。 请参考http://www.cplusplus.com/reference/iostream/ios_base/setf/ 了解更多信息。
There are different kinds of flags & masks you can use as well. Please refer http://www.cplusplus.com/reference/iostream/ios_base/setf/ for more information.
你好吗!
How are you!
使用
std::uppercase
和std::hex
格式化整型变量a
以十六进制格式显示。Use
std::uppercase
andstd::hex
to format integer variablea
to be displayed in hexadecimal format.