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的主要内容,如果未能解决你的问题,请参考以下文章