将 char 转换为 int 的奇怪错误(目标 C)
Posted
技术标签:
【中文标题】将 char 转换为 int 的奇怪错误(目标 C)【英文标题】:Odd bug converting char to int (Objective C) 【发布时间】:2012-06-25 06:17:16 【问题描述】:我设置了一个应用程序,在其中将 NSString 转换为 char 变量数组,并且尝试将一些字符转换为整数(基本上是从字符串中解析出数字)。但是当我尝试将它们转换为 int 变量时,它们会突然改变值。
例如:
char thechar = array[7]; //to make sure the issue isn't related to the array
NSLog(@"%c %i %i",thechar,(int) thechar, [[NSNumber numberWithUnsignedChar:thechar] intValue]);
返回这个:
3 51 51
转换它的两种方法(我发现)似乎将值更改为 51。有谁知道会发生什么?
【问题讨论】:
@dlev:我会把你的评论作为答案,因为它就是答案。 @dlev 那么我将如何将“3”作为整数呢? 【参考方案1】:我想通了:只需将其转换为 NSString,然后获取 intValue。
[[NSString stringWithFormat:@"%c", thechar] intValue];
【讨论】:
你可以(也应该)接受你自己的答案,这样人们就知道它已经解决了【参考方案2】:51 是文字字符“3”的数值。它可以追溯到 ASCII 标准,尽管许多常见的 Unicode 编码也保留了该值。
您可以非常可靠地减去 48(或“0”)来获得数字:
int num = (int)(numAsChar - '0');
或者,如果你想转换整个字符串,你可以使用atoi:
int num = atoi(myNumberString);
【讨论】:
第一个伤害我的大脑 - 看起来你正在减去一个字符串。 @MusiGenesis C++ 通常会伤害我的大脑。我很高兴这些天我的大部分工作都是用 C# 完成的。 我希望我能再次使用 C# - 我现在处于 Objective-C 世界。 好的,我想通了。减去 48 不是我想要的,因为它可以是任何数字,但 DID 的工作是将其转换为带有 stringWithFormat 的 NSString,然后对字符串执行 intValue。 @Greg 很高兴你解决了。您可能希望将您的发现作为答案发布,因为这实际上是解决问题的原因。以上是关于将 char 转换为 int 的奇怪错误(目标 C)的主要内容,如果未能解决你的问题,请参考以下文章
Arduino 串行返回奇怪的数字 + 无法将 char 数组转换为 int C++