尝试将字符串/字符转换为整数会产生意外结果



我遇到了一些奇怪的事情。这可能是微不足道的,但我找不到答案。谁能向我解释为什么在这个动作中我得到 49 的结果?

using namespace std;
int main() {
int number;
string binary = "10101011";
number = int(binary[0]);
cout << number; // result is 49 , why is that?    
}

binary[0]'1',它的ASCII值是49。

因为当您尝试将char类型的元素转换为int类型的binary[0]- 它会转换字符的 ASCII 代码,该代码只是一个数字,正如@QuentinUK提到的那样。

如果你想存储位并将它们转换为数字,你应该看看std::bitset。

如果你想从std::string中获取任何元素作为数字,你应该查看std::atoi。

您已定义字符串二进制 = "10101011"; 二进制[0]是字符"1"。将字符解析为 int 时,输出是该字符的 ASCII 值。

所以实际上在你的代码中,你不是在 int 中打印那个字符,而是打印 ASCII 值'1'即 49。

每当将字符转换为 int 时,它都会更改并分配该字符的 ASCII 值。

要解决您的问题,您可以使用FOLOW:

#define conv_digit(ch) (ch-'0') 

然后只需调用这个函数传递binary[0]或任何你想要的字符。

最新更新