我有一个二进制字符串,然后使用转换为整数atoi()
。当我这样做时,似乎会自动将二进制转换为十进制。问题在于所得的整数为负,并且与任何在线二进制至十进制转换器不一致。有什么问题atoi()
吗?我应该使用其他功能吗?
码:
string myString = "01000101";
int x = atoi(myString.c_str());
cout << x;
谢谢
atoi
不处理二进制数,它只是将它们解释为大十进制数。您的问题是它太高,并且由于将其解释为十进制数而导致整数溢出。
解决的办法是使用stoi
,stol
或者在C ++ 11中stoll
添加到string
。称他们为
int i = std::stoi("01000101", nullptr, 2);
int
值。std::string
您要转换的参数。size_t *
它将保存第一个非数字字符的索引的位置。int
,对应于将用于转换的基础。有关功能的信息,请参见其cppreference页面。
请注意,还有一些C ++ 11之前的函数具有几乎相同的名称,例如:strtol
与C ++ 11相比stol
。
他们做不同的工作,基地太多,但他们不这样做的错误相同的方式处理(尤其是他们试图转换“你好”的字符串缺乏时没有转换可以在给定的字符串,在所有如进行)和你应该可能更喜欢C ++ 11版本。
明确地说,将“ Hello”传递给strtol
C ++ 11和C ++ 11stol
都会导致:
strtol
返回0
并且没有给您任何方式将其识别为错误,stol
从C ++ 11抛出std::invalid_argument
并表明出了点问题。错误地将“ Hello”之类的内容解释为整数可能会导致错误,因此我认为应避免使用。
但是为了完整起见,也有指向其cppreference页面的链接。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句