C ++ cout十六进制格式

时间:2010-08-29 14:35:11

标签: c++

我是c编码员,是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);
}

输出:

 Value of x  ÿ  hexadecimal
 Value of x ff by printf

3 个答案:

答案 0 :(得分:21)

<<char处理为您要输出的“字符”,并且只输出该字节。 hex仅适用于类似整数的类型,因此以下内容将按预期执行:

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

Billy ONeal对static_cast的建议如下:

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

答案 1 :(得分:4)

您正在正确执行十六进制部分,但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);
}

答案 2 :(得分:0)

如果我正确理解了您的问题,您应该知道如何将hex转换为dec,因为您已经分配了unsigned char x = 0xff;

#include <iostream>
int main()
{
    unsigned char x = 0xff;
    std::cout << std::dec << static_cast<int>(x) << std::endl;
}

代替值255

有关strdec的流的详细信息,请参阅http://www.cplusplus.com/reference/ios/dec/

如果你想知道十进制值的十六进制值,这是一个简单的例子

#include <iostream>
#include <iomanip>

int main()
{
    int x = 255;

    std::cout << std::showbase << std::setw(4) << std::hex << x << std::endl;
}

打印oxff

如果您想在<iomanip>之前看到0x,则库ff是可选的。与hex号码打印相关的原始回复位于http://www.cplusplus.com/forum/windows/51591/