通过Cin获得十六进制

时间:2012-11-02 13:51:50

标签: c++ hex

为什么这段代码不起作用?

int x;
cin >> x;

根据0x1a的输入,我得到x == 0而不是26

为什么?

5 个答案:

答案 0 :(得分:26)

我相信为了使用十六进制你需要做这样的事情:

cin >> hex >> x;
cout << hex << x; 

你也可以用dec和oct等替换hex。

答案 1 :(得分:14)

实际上,您可以强制 >> 运算符获取并正确解释前缀00x。您所要做的就是删除std::cin的默认设置:

std::cin.unsetf(std::ios::dec);
std::cin.unsetf(std::ios::hex);
std::cin.unsetf(std::ios::oct);

现在,当您输入0x1a时,您将收到26。

答案 2 :(得分:3)

在使用<<时,请考虑>>std::cout/std::cin

std::cout << x表示从 x

获取值

std::cin >> x表示将值放入 x

注意操作员指向的方向。这应该会给你一个关于他们在使用这些函数时做了什么的提示。

结果是0而不是26的原因是因为std::cin将解析输入中的所有非数字字符。毕竟,x是一个int,它不会将0x识别为十六进制数的一部分。如果输入为9x2(结果只是9),则会产生相同的行为。

答案 3 :(得分:1)

您的代码应为:

int x;
cin >> hex >> x;

默认情况下,cin预计读入的任何数字都是十进制数。显然,0x1a不是有效的小数,因此无法进行转换。为了使其工作,我们必须使用流修饰符 hex,它提示cin期望从十六进制而不是十进制转换数字。

在这种情况下,0x前缀是可选的,因此输入10将被读取并存储为十进制16。

答案 4 :(得分:0)

#include<iostream>
using namespace std;

int main()
{
    int data[16];
    cout << "enter the 16 hexadecimal numbers\n";
    for(int i = 0;i < 16;i++)
    {
        if(cin >> hex >> data[i])
            cout << "input worked\n";
        else{
            cin.clear();
            cout << "invalid input\n";
        }
    }
}