开发者

C++ cout hex format

i am a c coder, new to c++.

i try to print the following with cout with strange output. Any comment on this behaviour is appreciated.

#inc开发者_JAVA百科lude<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);
}

output:

 Value of x  ÿ  hexadecimal
 Value of x ff by printf


<< handles char as a 'character' that you want to output, and just outputs that byte exactly. The hex only applies to integer-like types, so the following will do what you expect:

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

Billy ONeal's suggestion of static_cast would look like this:

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


You are doing the hex part correctly, but x is a character, and C++ is trying to print it as a character. You have to cast it to an integer.

#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);
}


If I understand your question correctly, you should expect to know how to convert hex to dec since you have already assigned unsigned char x = 0xff;

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

which shall give the value 255 instead.

Further detail related to the the str stream to dec shall refer in http://www.cplusplus.com/reference/ios/dec/.

If you want to know the hexadecimal value from the decimal one, here is a simple example

#include <iostream>
#include <iomanip>

int main()
{
    int x = 255;

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

which prints oxff.

The library <iomanip> is optional if you want to see 0x ahead of ff. The original reply related to hex number printing was in http://www.cplusplus.com/forum/windows/51591/.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜