将字符串转换为 int C++ 的错误结果
wrong result of casting string to int C++
string test;
test="3527523";
int a=test[3];
std::cout<<a<<std::endl;
我原本以为输出是第 7 位,但我得到了 55 号。我搜索了不同的帖子,他们都使用这种方法没有任何问题。我只是不知道我的情况问题出在哪里。感谢您的帮助!
test[3]
返回char
,您要将其转换为整数,因此它返回字符的 ASCII 值。 ASCII 中的3
是 55
。
尝试改用char
作为a
类型:
char a = test[3];
std::cout << a; // 3
如果您希望结果为整数,请从'0'
中减去该字符:
std::string test = "3527523";
int a = test[3] - '0';
std::cout << a; // 3
你会得到括号旁的字符'7',它的ASCII代码为55(48+7(。
问题是您将test[3]
分配给类型为 int
的变量,从而导致打印实际字符代码 (55( 而不是表示的字符 ('7'
(。打印前,请将int
替换为char
或static_cast
。
你不"投射",你"转换"。
您可以使用 sscanf((、atoi(( 等函数来转换字符串的值:
int iret = sscanf (test, "%d", &a);
test[3] 的值是 ASCII 字符 '7',实际上是整数 '55'。
附注:"sscanf(("的美妙之处在于,您可以通过检查"iret != 1"来轻松检测是否发生了解析错误。
使用 atoi:
int atoi (const char * str(;//Convert string to integer
例如:
string test;
test="3527523";
const char c = test[3];
int a=atoi(&c);
std::cout<<a<<std::endl;
相关文章:
- 如何修复循环中的错误产生的错误结果?
- 添加可变参数函数的错误结果
- 使用特征 3 线性系统求解器的错误结果
- 按位包含 OR 的错误结果
- 如果我将索引变量更改为零,并且合并函数中的k = 0,则获得合并排序的错误结果
- STD :: FPCLASSIFY的错误结果使用Valgrind进行长时间的双重双重结果
- 视觉工作室的错误结果
- 将C#struct传递给C 不受管理的DLL返回错误结果
- 最长的常见子字错误结果
- 华氏度到摄氏度的错误结果
- UE4中简单坐标变换的错误结果
- 记忆错误结果的说明[编译器行为]
- 如何解决错误PRJ0002:错误结果 -1073741515从"cl.exe"返回?
- 错误 PRJ0002:错误结果 -1073741515 从"C:\Program Files\Microsoft Visual Studio 9.0\VC\bin\cl.
- glGetUniformLocation OpenGL ES 2.0(在ipad 3 iOS 7.0.3上返回错误结果)
- 在模板函数中调用std::for_each时出现错误结果
- 使用copy和back_inserter将矢量附加到其自身时出现错误结果
- CUDA 线程在全局内存中的私有位置写入时出现错误结果
- 来自 c++ 代码的错误结果
- 使用浮点值和铸造的算术运算的错误结果 - 差异很大,我想这不是准确值的情况(429497)?