NSString 到 NSUInteger

Posted

技术标签:

【中文标题】NSString 到 NSUInteger【英文标题】:NSString to NSUInteger 【发布时间】:2010-05-01 11:24:20 【问题描述】:

我在 NSString @"15" 中有一个数字。我想将其转换为 NSUInteger,但我不知道该怎么做...

【问题讨论】:

要请求支持从 NSString 读取无符号值,请访问 bugreport.apple.com 并针对组件 Foundation | X 提交一个重复的 radar://2264733。 【参考方案1】:
NSString *str = @"15";
// Extract an integer number, returns 0 if there's no valid number at the start of the string.
NSInteger i = [str integerValue];

如果您真的想要一个 NSUInteger,只需转换它,但您可能需要事先测试该值。

【讨论】:

有点不完整。如果值大于 INT_MAX,这将不起作用。如果您将它用于字节长度之类的事情,这很有可能。 将其转换为 NSUInteger(如前所述)看起来像 NSUInteger i = (NSUInteger)[str integerValue];【参考方案2】:

当前选择的答案对于 NSUInteger 不正确。正如 Corey Floyd 指出对所选答案的评论,如果该值大于 INT_MAX,这将不起作用。更好的方法是使用 NSNumber,然后使用 NSNumber 上的一种方法来检索您感兴趣的类型,例如:

NSString *str = @"15"; // Or whatever value you want
NSNumber *number = [NSNumber numberWithLongLong: str.longLongValue];
NSUInteger value = number.unsignedIntegerValue;

【讨论】:

请在您的评论 hasan83 中更具描述性。你到底做了什么没用? 一个适合 nsuinteger 但不适合 nsinteger 的值确实被转换了。【参考方案3】:

所有这些答案在 64 位系统上都是错误的。

NSScanner *scanner = [NSScanner scannerWithString:@"15"];
unsigned long long ull;
if (![scanner scanUnsignedLongLong:&ull]) 
  ull = 0;  // Or handle failure some other way

return (NSUInteger)ull;  // This happens to work because NSUInteger is the same as unsigned long long at the moment.

使用 9223372036854775808 进行测试,它不适合已签名的 long long

【讨论】:

【参考方案4】:

你可以试试[string longLongValue][string intValue]..

【讨论】:

以上是关于NSString 到 NSUInteger的主要内容,如果未能解决你的问题,请参考以下文章

NSString 到 NSUInteger

如何绑定到 NSString?

将 NSString 附加到 NSURL?

NSString 到 NSurl

NSString 到 NSDate 的转换失败

初始化后有 EXC_BAD_ACCESS 到 NSString