我是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
答案 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
。
有关str
到dec
的流的详细信息,请参阅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/。