c++ - 在 C++ 中将字符串转换为无符号数的正确方法

标签 c++

我尝试使用:

std::string s = "-150";
unsigned int a = atoi(s.c_str());
std::cout << a;

std::string s = "-150";
std::istringstream reader(s);
unsigned int a;
reader >> a;
std::cout << a;

我总是得到 4294967146。我知道它是 U_INT_MAX - 150
如果无法转换数字,导致输入数据无效,我怎么会出错? 或者(至少)自动转换为 150
附言
我想找到一种无需对字符串进行操作的方法。

最佳答案

您希望输入一个数字,并希望检查它是否适合unsigned int,然后这样做。将字符串转换为数字的通用数据类型(有符号、 float 、大空间 -> double)并检查它是否可以在不丢失精度的情况下转换为您想要的类型。

你想要一个没有符号的整数,所以你的数字必须是正数,在给定的范围内(目前参见 std::numeric_limits )并且没有小数部分。

关于c++ - 在 C++ 中将字符串转换为无符号数的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35895208/

相关文章:

c++ - 您如何协调常见的 C++ 命名约定与库的命名约定

c++ - 优化文件读取C++

c++ - while循环条件c++中 ","的用途是什么?

c++ - wstringstream 到 LPCWSTR

c++ - 如何在 C++ 中将类(不是对象)作为参数传递

c++ - C++ 11中日期字符串的工作日

c++ - 如何在数据以二进制零结尾时初始化 std::string

c++ - 在通用编程/TMP 世界中,模型/策略和 "concept"究竟是什么?

c++ - 父类有一个虚函数。父类中必须要有虚析构函数吗?

c++ - 具有不可移动类型的 boost::variant