通过Cin获得十六进制

Qua*_*ker 11 c++ hex

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

int x;
cin >> x;
Run Code Online (Sandbox Code Playgroud)

随着0x1a我的输入得到,x == 0而不是26.

为什么?

sea*_*ean 27

我相信为了使用hex你需要做这样的事情:

cin >> hex >> x;
cout << hex << x; 
Run Code Online (Sandbox Code Playgroud)

你也可以用dec和oct等代替hex.


Kar*_*l D 17

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

std::cin.unsetf(std::ios::dec);
std::cin.unsetf(std::ios::hex);
std::cin.unsetf(std::ios::oct);
Run Code Online (Sandbox Code Playgroud)

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

  • 我认为这应该是公认的答案.如果您执行以下操作,请使用十六进制:cin >> hex> x; 输入17你会得到23,这几乎总是不是你想要的用户.使用此方法,您可以获得任何用户想要的内容,并考虑前缀.23给出23,0xa给出0xa,依此类推. (4认同)
  • `std::cin.unsetf(std::ios::basefield);` (3认同)
  • 它们都是很好的答案,它确实取决于应用程序上下文来确定您应该使用哪些.Stroustrup在他的书中讨论了两种方法:这两种方法都很有用.两者都投了赞成票.问题upvoted.每个人都得到了一个赞成! (2认同)