C++ 通过Cin获得hex
为什么这个代码不起作用C++ 通过Cin获得hex,c++,hex,C++,Hex,为什么这个代码不起作用 int x; cin >> x; 通过输入0x1a我得到x==0而不是26 为什么会这样?我认为要使用十六进制,您需要执行以下操作: cin >> hex >> x; cout << hex << x; cin>>hex>>x; cout您的代码应为: int x; cin >> hex >> x; 默认情况下,cin期望读入的任何数字都是十进制的。显然,0x1a不是有效的小数,因
int x;
cin >> x;
通过输入0x1a
我得到x==0
而不是26
为什么会这样?我认为要使用十六进制,您需要执行以下操作:
cin >> hex >> x;
cout << hex << x;
cin>>hex>>x;
cout您的代码应为:
int x;
cin >> hex >> x;
默认情况下,cin
期望读入的任何数字都是十进制的。显然,0x1a
不是有效的小数,因此无法进行转换。要使其工作,我们必须使用流修饰符hex
,它提示cin
期望从十六进制而不是十进制转换数字
在这种情况下,0x
前缀是可选的,因此输入的10
将被读取并存储为十进制16。在使用std::cout/std::cin
时,可以这样想:
std::cout>x
表示将值放入x
请注意操作符所指向的方向。这应该会给你一个提示,告诉你在使用这些函数时它们会做什么
结果得到0而不是26的原因是std::cin
将解析输入中的所有非数字字符。毕竟,x
是一个整数,它不会将0x
识别为十六进制数的一部分。如果输入是9x2
(结果将是9
),它将具有相同的行为
使用名称空间std;
int main()
{
国际数据[16];
cout>hex>>数据[i])
实际上,您可以强制>
运算符获取并正确解释前缀0
和0x
。只需删除std::cin
的默认设置:
std::cin.unsetf(std::ios::dec);
std::cin.unsetf(std::ios::hex);
std::cin.unsetf(std::ios::oct);
现在,当您输入0x1a时,您将收到26。好吧,首先应该是cin>>x
。如果我们还没有学会使用十六进制,可能是故意的错误?十六进制是std库的一部分。您可以阅读更多内容。它也可以与二进制一起工作吗?类似于的内容您还需要重命名数据数组吗,否则该数组具有和操纵者的名字一样会导致trouble@11684不,不幸的是,没有bin
选项。似乎应该有。你能向OP解释为什么吗?好的,但是人们如何要求cin
读取十六进制呢?是否有一个标志,就像cout
一样?除了使用std以外,我知道没有其他方法::hex
操纵器,用于在流上设置基本字段格式标志。您可以使用操纵器,或者认为这应该是可接受的答案。使用hex,如果您执行以下操作:cin>>hex>x;并输入17,您将得到23,这几乎总是不是您作为用户想要的。使用此方法,您可以得到任何用户想要的,前缀将包含在deration.23给出了23,0xa给出了0xa等等。它们都是很好的答案,这实际上取决于应用程序上下文来决定应该使用哪一种。Stroustrup在他的书中对这两种方法进行了讨论:两种方法都是有用的。都是向上投票的。问题向上投票的。每个人都有向上投票的机会!std::cin.unset(std::ios::basefield);
std::cin.unsetf(std::ios::dec);
std::cin.unsetf(std::ios::hex);
std::cin.unsetf(std::ios::oct);