0

我有一个格式为易于阅读的电话号码的电话号码,即(123) 123-4567

int但是,当我想在代码中使用该电话号码时,我需要将该字符串解析为一个数字变量(例如

但是,[string intValue]; 不起作用-我intValue在以前的项目中使用了大约一百万次,都没有问题,但是在这里,我传入的每个字符串,我得到的都是相同的,随机int退出:

- (int)processPhoneNumber:(NSString *)phoneNumber {
      NSMutableString *strippedString = [NSMutableString stringWithCapacity:10];

      for (int i=0; i<[phoneNumber length]; i++) {
           if (isdigit([phoneNumber characterAtIndex:i])) {
                  [strippedString appendFormat:@"%c",[phoneNumber characterAtIndex:i]];
           }
      }

     NSLog(@"clean string-- %@", strippedString);

     int phoneNumberInt = [strippedString intValue];

     NSLog(@"**** %d\n &i", phoneNumberInt, phoneNumberInt);

     return phoneNumberInt;
}

然后当我调用这个方法时:

NSLog(@"%i", [self processPhoneNumber:self.phoneNumberTextField.text]);

我得到:2147483647我给这个方法的每个输入都会返回:2147483647

4

2 回答 2

5

正如 CRD 已经解释的那样,您正在尝试将该字符串转换为太小而无法容纳该值的类型,并且您正在取回该类型的最大可能值。

然而,你真正的问题是更深层次的。电话“号码”并不是真正的号码。它不代表数量。你永远不会对一个进行算术运算。它实际上是一串数字,你应该这样处理它。不要转换它;只需对字符串进行操作。

另请参阅表示电话号码的正确方法是什么?

于 2012-10-21T19:37:33.033 回答
4

2147483647 是溢出时返回的INT_MAX。您的电话号码有多大,可以放入一个int吗?也许你应该使用longLongValue

于 2012-10-21T19:25:04.480 回答