【问题标题】:Weird converting NSString to int issue奇怪的将 NSString 转换为 int 问题
【发布时间】:2013-03-11 20:05:50
【问题描述】:

我正在将项目的 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);

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

【问题讨论】:

  • NSString *msg = [NSString stringWithFormat:@"%@", message]; - 天哪,为什么?
  • @H2CO3 这与问题完全无关。
  • @MikeD 但是,降低可读性(如果每秒调用无数次,性能也会降低)是多余的。应该指出这是一种应避免的不良做法。
  • @MikeD 虽然这可能不是问题的原因,但 stringWithFormat: 的使用非常愚蠢。马克,至于你的问题,谷歌NSIntegerMax。

标签: ios nsstring timestamp


【解决方案1】:

1363032033711 太大。它无法转换为int(在 iOS 上似乎是 32 位长)。如果您在 Google 上搜索 2147483647,您会发现它是 32 位签名 int 的最大值。也许这就是- [NSString intValue] 指示它是否发现一个太大而无法转换的数字。

解决方案:使用更宽的数字类型和NSScanner

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

【讨论】:

  • @Mark117 我知道我是 :P 谢谢,没问题。
  • @HotLicks Blehh :D +1。
  • @H2CO3 - 我不熟悉表情符号“:D+1”。那应该是口水流出来了吧?
  • @HotLicks 舌头上有一个奇怪的穿孔。
猜你喜欢
  • 1970-01-01
  • 2011-10-08
  • 1970-01-01
  • 1970-01-01
  • 2015-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多