C++ cout十六进制格式

pdk*_*pdk 17 c++

我是ac编码器,是c ++的新手.

我尝试用奇怪的输出cout打印以下内容.对此行为的任何评论表示赞赏.

#include<iostream>
using namespace std;

int main()
{
        unsigned char x = 0xff;

        cout << "Value of x  " << hex<<x<<"  hexadecimal"<<endl;

        printf(" Value of x %x by printf", x);
}
Run Code Online (Sandbox Code Playgroud)

输出:

 Value of x  ÿ  hexadecimal
 Value of x ff by printf
Run Code Online (Sandbox Code Playgroud)

Tha*_*tos 22

<<处理char您想要输出的"字符",并且只输出该字节.该hex只适用于类似于整数类型,所以下面会做你所期望的:

cout << "Value of x  " << hex << int(x) << "  hexadecimal" << endl;
Run Code Online (Sandbox Code Playgroud)

Billy ONeal的建议static_cast看起来像这样:

cout << "Value of x  " << hex << static_cast<int>(x) << "  hexadecimal" << endl;
Run Code Online (Sandbox Code Playgroud)

  • @pdk:它意味着是等价的,但只有当`cout << x`通常输出一些十进制表示时它才有效.由于`cout <<(char)`没有(它直接输出那个字节),`hex`没有意义,并且没有应用.因此,我们强制转换为`int`类型,并且调用处理`int`的`<<`,它输出十六进制表示. (3认同)
  • +1 - 但你应该在这里使用`static_cast`. (2认同)

Sta*_*key 5

您正确地执行了十六进制部分,但 x 是一个字符,而 C++ 试图将其打印为一个字符。您必须将其强制转换为整数。

#include<iostream>
using namespace std;

int main()
{
        unsigned char x = 0xff;

        cout << "Value of x  " << hex<<static_cast<int>(x)<<"  hexadecimal"<<endl;

        printf(" Value of x %x by printf", x);
}
Run Code Online (Sandbox Code Playgroud)

  • 在 printf 中,通过指定 %x 告诉 C++ 如何解释 x,而在 hex &lt;&lt; x 中,编译器将使用流运算符的 unsigned char 重载,因为这是类型。通过将 x 的类型更改为 int,将应用 &lt;&lt; 的 int 重载。 (2认同)