将 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)的主要内容,如果未能解决你的问题,请参考以下文章

将 int 转换为 char* 时的奇怪输出

Arduino 串行返回奇怪的数字 + 无法将 char 数组转换为 int C++

C语言中 怎样把一个int转换成char

Java - char、int 转换

将 int(C::*)(int, char) 类型转换为 int(int, char) 类型

c ++将void *转换为int错误