怪异地将NSString转换为int问题

时间:2013-03-11 20:05:51

标签: ios nsstring timestamp

我正在将NSString转换为项目的int,以便比较时间戳。这是我转换时从NSLog获得的响应。

Server Time Stamp = 1363032033711 AND Server Time Stamp CONVERTED: 2147483647

我正在使用此代码进行转换:

NSString *msg = [NSString stringWithFormat:@"%@", message];
NSArray *subString = [msg componentsSeparatedByString:@" "];
NSString *timeStamp = [subString lastObject];
int serverTimeStamp = [timeStamp intValue];
NSLog(@"Server Time Stamp = %@ AND Server Time Stamp CONVERTED: %d", timeStamp, serverTimeStamp);

我不确定转换后的数字为何如此奇怪,我的代码出现问题,还是将字符串转换为整数?

1 个答案:

答案 0 :(得分:4)

1363032033711太大了。它无法转换为int(在iOS上看起来是32位长)。如果您在Google上搜索2147483647,则会发现它是32位签名int的最大值。也许- [NSString intValue]表明它是否发现了一个太大而无法转换的数字。

解决方案:使用更广泛的类型和NSScanner

NSScanner *scn = [NSScanner scannerWithString:[subString lastObject]];
long long serverTimeStamp;
[scn scanLongLong:&serverTimeStamp];