5

NSString オブジェクトを同じ数値の NSNumber に変換しようとしています。このステートメントを使用して NSString オブジェクトを作成すると...

NSString *songID = [localNotif.userInfo objectForKey:@"SongID"];

varsongIDには文字列 value が含まれます@"10359537395704663785"。そして、ステートメントを使用してそれを NSNumber オブジェクトに変換しようとすると...

NSNumber *songIDNumber = [NSNumber numberWithLongLong:[songID longLongValue]];

変数songIDNumberに間違った値が含まれています9223372036854775807

私は何を間違っていますか?このコードが機能して正しい NSNumber 値を生成する場合もありますが、ほとんどの場合、上記のように失敗します。

よろしくお願いします。

更新:このサイトが大好きです! unbeli と carl のおかげで、NSString から NSNumber に変換するための更新されたコードを使用して修正できました...

unsigned long long ullvalue = strtoull([songID UTF8String], NULL, 0);
NSNumber *songIDNumber = [NSNumber numberWithUnsignedLongLong:ullvalue];
4

2 に答える 2

5

longLongValue LLONG_MAXオーバーフローの場合に戻りLLONG_MAX、正確に9223372036854775807が得られます。値が単に収まりませんlong long

代わりにNSDecimalNumberを使用してみてください。

于 2010-09-01T21:27:28.780 に答える
4

922337203685477580710 進数は0x7FFFFFFFFFFFFFFF16 進数です。あなたの数値は です10359537395704663785。これは a には大きすぎlong longてオーバーフローしています。NSStringのドキュメントから:

LLONG_MAXまたはLLONG_MINオーバーフローを返します。

于 2010-09-01T21:26:30.903 に答える