二进制字符串与' atoi()'整数

时间:2014-05-11 19:31:13

标签: c++ binary decimal atoi

我有一个二进制字符串,然后使用atoi()转换为整数。当我这样做时,它似乎自动将二进制转换为十进制。问题是得到的整数是负数,并不与任何在线二进制到十进制转换器一致。是atoi()打破了什么?我应该使用不同的功能吗?

代码:

string myString = "01000101";
int x = atoi(myString.c_str());
cout << x;

由于

2 个答案:

答案 0 :(得分:23)

atoi不处理二进制数,它只是将它们解释为大十进制数。你的问题是它太高而你得到一个整数溢出,因为它被解释为十进制数。

解决方案是使用已添加到C ++ 11中的stoi的{​​{1}},stolstoll。称他们为

string
  • 返回的值是转换后的int i = std::stoi("01000101", nullptr, 2); 值。
  • 第一个参数是您要转换的int
  • 第二个是std::string,它会保存第一个非数字字符的索引。
  • 第三个是size_t *,对应于将用于转换的基础..

有关功能的信息,请查看its cppreference page


请注意,还有一些名称几乎相同的C ++ 11之前的函数,例如:int与C ++ 11 strtol相比。 它们也可以用于不同的基础,但是它们不会以相同的方式进行错误处理(当根本不能对给定的字符串进行转换时,它们尤其缺乏,例如尝试将“hello”转换为字符串)和< strong>你应该更喜欢C ++ 11版本。

说实话,将“Hello”传递给stol和C ++ 11 strtol会导致:

  • stol返回strtol并且没有给您任何方法将其标识为错误,
  • 来自C ++ 11的
  • 0抛出stol并表示出现了问题。

错误地将“Hello”这样的内容解释为整数可能会导致错误,在我看来应该避免。

但为了完整起见,还要链接到its cppreference page

答案 1 :(得分:4)

听起来你应该使用strtol() 2作为最后一个参数。