当前位置:  开发笔记 > 编程语言 > 正文

C++ cout十六进制值?

如何解决《C++cout十六进制值?》经验,为你挑选了7个好方法。

我想要做:

int a = 255; 
cout << a;

并在输出中显示FF,我该怎么做?



1> Greg Hewgill..:

使用:

#include 

...

std::cout << std::hex << a;

还有许多其他选项可以控制输出编号的确切格式,例如前导零和大写/小写.


这似乎改变了从cout到hex的所有未来输出; 所以如果你只想用'hex'打印十六进制,你可能需要像`cout << hex << a << dec;`这样的东西来改变它.
@ShreevatsaR将十六进制还原为十六进制的一个问题是dec可能不是先前设置的值,特别是如果您正在编写通用库方法.[这个问题](http://stackoverflow.com/q/2273330/461834)有一些关于如何存储和恢复状态的答案.你可以使用`ios :: fmtflags f(cout.flags());`来保存状态,并用`out.flags(f);`恢复它.
@Cœur谢谢,发布在这里:/sf/ask/17360801/

2> Benoît..:

std::hex定义包括在内.但要使用像std::setprecision/std::setw/std::setfill/ etc 这样的东西你必须包含.



3> Ashwin Nanja..:

要操纵流以十六进制打印,请使用hex操纵器:

cout << hex << a;

默认情况下,十六进制字符以小写形式输出.要将其更改为大写,请使用uppercase操纵器:

cout << hex << uppercase << a;

要稍后将输出更改回小写,请使用nouppercase操纵器:

cout << nouppercase << b;


nouppercase是否会将输出更改回十进制?

4> Ben-Uri..:

如果要打印单个十六进制数,然后恢复为十进制,可以使用:

std::cout << std::hex << num << std::dec << std::endl;



5> 小智..:

您也可以使用不同种类的旗帜和面具.有关更多信息,请参阅http://www.cplusplus.com/reference/iostream/ios_base/setf/.

#include 
using namespace std;

int main()
{
    int num = 255;
    cout.setf(ios::hex, ios::basefield);
    cout << "Hex: " << num << endl;

    cout.unsetf(ios::hex);
    cout << "Original format: " << num << endl;

    return 0;
}


我认为这段代码的行为是未定义的.setf清除ios :: basefield位,包括ios :: dec(标准流的默认值),并仅设置ios :: hex.当未设置ios :: hex时,ios :: basefield中的每个位都未设置.如何打印第二次?证据表明这些比特都未设置:http://ideone.com/fYXyh6.根据Thinking in C++ vol 2 page 189,这允许用于ios :: floatfield,但它对ios :: basefield没有相同的说法.

6> Daniel Sloof..:

我知道这不是OP要求的,但我仍然认为值得指出如何用printf来做.我几乎总是喜欢在std :: cout上使用它(即使没有以前的C背景).

printf("%.2X", a);

'2'定义精度,'X'或'x'定义大小写.


@rlbond stdout是C中的FILE*
长期以来一直是printf与cout之战.当然,cout具有很好的属性,它来自ostream并获得所有的抽象优势.C没有流对象的概念,因此printf和fprintf是2个不同的命令.真的,如果stdout是FILE*,它在C中会很好.会让事情变得更容易.
这就是为什么`printf("hello \n")`等同于`fprintf(stdout,"hello \n")`.更有用的是,你可以将`stdout`(或`stdin`或`stderr`)传递给一个带有'FILE*`参数的函数.

7> jtpereyda..:

std::hex 让您获得十六进制格式,但这是一个有状态的选项,这意味着您需要保存和恢复状态,否则将影响以后的所有输出。

天真地切换回原来的状态std::dec是好的,那可能不是事实,尤其是在编写库时。

#include 
#include 

...

std::ios_base::fmtflags f( cout.flags() );  // save flags state
std::cout << std::hex << a;
cout.flags( f );  // restore flags state

这结合了Greg Hewgill的回答和其他问题的信息。

推荐阅读
php
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有