Ski*_*NBS 14 c++ binary decimal atoi
我有一个二进制字符串,然后我使用转换为整数atoi().当我这样做时,它似乎自动将二进制转换为十进制.问题是结果整数是负数,并且不符合任何在线二进制到十进制转换器.有什么东西坏了atoi()吗?我应该使用不同的功能吗?
码:
string myString = "01000101";
int x = atoi(myString.c_str());
cout << x;
Run Code Online (Sandbox Code Playgroud)
谢谢
use*_*027 29
atoi不处理二进制数,它只是将它们解释为大十进制数.你的问题是它太高而你得到一个整数溢出,因为它被解释为十进制数.
解决方案是使用stoi,stol或者在C++ 11中stoll添加string.称他们为
int i = std::stoi("01000101", nullptr, 2);
Run Code Online (Sandbox Code Playgroud)
int值.std::string您要转换的.size_t *它将保存第一个非数字字符的索引.int对应于将用于转换的基数.有关函数的信息,请查看其cppreference页面.
请注意,还有一些名称几乎相同的C++ 11函数,例如:strtol与C++ 11相比stol.
它们也可以用于不同的基础,但是它们不会以相同的方式进行错误处理(当没有对给定的字符串进行任何转换时它们尤其缺乏,例如尝试将"hello"转换为字符串)而你应该更喜欢C++ 11版本.
为了说明我的观点,将"Hello"传递给两者strtol和C++ 11 stol会导致:
strtol返回0,并没有给你任何方法将其识别为错误,stol从C++ 11抛出std::invalid_argument并表明出现了问题.错误地将"Hello"这样的内容解释为整数可能会导致错误,在我看来应该避免.
但为了完整起见,还要链接到其cppreference页面.