将NSString转换为无符号长整型(Unsigned long)

6

我有一个 NSString 值,我想将其转换为 unsigned long。我使用了以下代码:

NSString *updateId = [NSString stringWithFormat:@"%@",[tweet updateId]];

NSLog(@"%@",[tweet updateId]);
unsigned long  tweetId = [updateId longLongValue];
NSLog(@"ButtonPressed: .......%llu",tweetId);

但它没有返回正确的值...

它返回什么?updatedId 返回的数据类型是什么? - Macmade
updateId返回的是NSString类型。我的输出是65278530740695040 2011-05-03 12:47:56.704 MiniTwit[2949:207] 按钮被按下:.......6071468025620606976 - Abhishek
如需请求从NSString读取无符号值的支持,请访问http://bugreport.apple.com并针对组件“Foundation | X”提交radar:// 2264733的副本。 - Quinn Taylor
3个回答

11

使用[NSNumberFormater]1是Cocoa的方法:

NSNumberFormatter* formatter = [[NSNumberFormatter alloc] init];
NSLog(@"%lu", [[formatter numberFromString:updateId] unsignedLongValue]);
[formatter release];
[推文更新ID]的类型是什么?
它包含任何本地化内容(例如千位分隔符)吗?
如果是这样,您可以使用setLocale:配置NSNumberFormatter实例。

NSNumberFormatter* formatter = [[NSNumberFormatter alloc] init]; NSLog(@"%lu", [[formatter numberFromString:updateId] unsignedLongValue]); [_engine deleteUpdate:formatter]; [formatter release]; 无法正常工作,出现警告。 - Abhishek
1
为什么你要再用另一个NSString包装它呢?你可以直接将[tweet updateId]传递给numberFromString:。 - Thomas Zoechling
警告是传递参数1的'deleteupdate'使指针成为无例...方法是
  • (NSString *)deleteUpdate:(unsigned long)updateID
- Abhishek
你的 deleteUpdate: 方法接受一个无符号长整型值吗?传递 [formatter unsignedLongValue]。 - Thomas Zoechling
1
你正在直接传递格式化程序,这样是行不通的。使用 [formatter unsignedLongValue] 获取无符号长整型值。 - Thomas Zoechling
[_engine deleteUpdate:[[formatter numberFromString:[tweet updateId]] unsignedLongLongValue] ]; 使用了这个代码,它返回了正确的值。但是更新没有被删除。感谢您的帮助 :) - Abhishek

0
unsigned long tweetId = [[NSNumber numberWithInteger:[updateId integerValue]] unsignedLongValue];

0
你可以尝试使用C标准库中的atol函数:
unsigned long tweetId = atol( [ updateId cStringUsingEncoding: NSASCIIStringEncoding ] );

顺便提一下,你的NSLog应该是lu而不是llu

我应该包含哪个头文件?它会给出警告“NSString可能无法响应CStringUsingEncoding”。 - Abhishek
你是在使用CStringUsingEncoding还是cStringUsingEncoding方法?这些方法是区分大小写的。 - Ben Baron

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接