Objective c NSString intValue不用于检索电话号码
我有一个格式化为易读电话号码的电话号码,即,Objective c NSString intValue不用于检索电话号码,objective-c,cocoa-touch,nsstring,type-conversion,phone-number,Objective C,Cocoa Touch,Nsstring,Type Conversion,Phone Number,我有一个格式化为易读电话号码的电话号码,即,(123)123-4567 但是,当我想在代码中使用该电话号码时,我需要将该字符串解析为数字变量(例如int) 但是,[string intValue]不起作用-我在以前的项目中使用了intValue大约一百万次,都没有问题,但是在这里,我传入的每个字符串都会得到相同的、随机的int: - (int)processPhoneNumber:(NSString *)phoneNumber { NSMutableString *strippedS
(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;
}
我得到:2147483647
我给这个方法的每个输入返回:2147483647
2147483647是溢出时返回的INT\u MAX。您的电话号码有多大,是否可以放入int
?也许您应该使用longValue
?,正如CRD已经解释的那样,您正在尝试将该字符串转换为一个太小而无法容纳该值的类型,并且您正在获取该类型的最大可能值
然而,你真正的问题是更深层次的。电话号码并不是真正的号码。它不代表数量。你永远不会对一个人进行算术运算。实际上是一串数字,你应该这样处理。不要改变它;只要操作绳子就行了
另请参见?我的电话号码是10位数字,因为这是溢出值。但是如果说区号是803,那是否意味着以803开头的10位数的数字会溢出?@Andrew-是的,它会溢出。您的int
是32位有符号的。使用long-long
(或UInt64
等)获取64位无符号值。谢谢。我从来没有真正理解int、long、short、signed、unsigned等的区别。@Andrew-On Mac OS X上的int
总是32位,long
总是64位,long
取决于编译方式。不同的系统使用不同的64位模式-请参阅。我建议您完全走错了方向。电话号码并不是真正的号码。它不代表数量。你永远不会对一个人进行算术运算。实际上是一串数字,你应该这样处理。看,我100%支持@Josh Caswell。在int表示法中,您甚至不知道是否需要在开始时调用某些“0”!您是否使用Xcode调试工具逐步检查了代码,以找出问题出现的地方?知道代码的哪一部分不能正常工作会有很大帮助。这是有道理的,我同意。我把它设为int,这样我可以很容易地调用它,但你的解释更有意义。如果你能把它写成一个答案,我会接受的
NSLog(@"%i", [self processPhoneNumber:self.phoneNumberTextField.text]);