web-dev-qa-db-ja.com

NSStringとの間のunsignedlonglong値の保存と取得

NSStringに格納し、文字列から取得したいunsigned longlong値があります。

最初はNSNumberに値があり、これを使用して文字列を取得しています

NSString *numStr = [NSString stringWithFormat:@"%llu", [myNum unsignedLongLongValue]];

ここで、myNumはNSNumberです。

NSStringからNSNumberを取得するには、最初にunsigned longlong値を取得する必要があります。ただし、NSStringクラスにはそれを行うメソッドはありません(unsigned long long値ではなく、long long値を取得するためのメソッドがあります)。

誰かが値をNSNumber変数に戻す方法を教えてもらえますか?.

ありがとう。

23
lostInTransit

これを達成する方法はたくさんあります。以下は最も実用的です:

NSString *numStr = [NSString stringWithFormat:@"%llu", [myNum unsignedLongLongValue]];

// .. code and time in between when numStr was created
// .. and now needs to be converted back to a long long.
// .. Therefore, numStr used below does not imply the same numStr above.

unsigned long long ullvalue = strtoull([numStr UTF8String], NULL, 0);

これにより、numStrには数字のみが含まれ、「有効な」unsigned longlong値が含まれるなどのいくつかの合理的な仮定が行われます。このアプローチの欠点は、UTF8Stringが本質的に[[numStr dataUsingEncoding:NSUTF8StringEncoding] bytes]に相当するもの、つまり、呼び出しごとに自動解放された32バイトのメモリのラインに沿ったものを作成することです。ほとんどの用途では、これはまったく問題ありません。

unsignedLongLongValueのようなものをNSStringに追加する方法の例として、非常に高速で、副作用として自動解放されたメモリを使用しない場合は、 this SO質問 。具体的には、rklIntValueの実装例。これは、unsignedLongLongValueを実装するためにわずかな変更のみを必要とします。

strtoullの詳細については、manページを参照してください。

58
johne