2009-07-25 23 views
22

NSStringに格納して文字列から取得する、符号なしlong long値があります。NSStringとの間でunsigned long long値を格納/取得する

最初は私がするNSNumberに値を持っていると私は、文字列myNumがするNSNumberである

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

を取得するために、これを使用しています。

NSStringからNSStringを取得するには、まずunsigned long long値を取得する必要があります。しかし、NSStringクラスにはこれを行うメソッドがありません(unsigned long long値ではなく、long long値を取得するメソッドがあります)。

誰かが値をNSNumber変数に戻す方法を教えてください。

ありがとうございました。

答えて

56

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

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 long long型の値が含まれています。このアプローチの欠点は、基本的に[[numStr dataUsingEncoding:NSUTF8StringEncoding] bytes]に相当するもの、つまり呼び出しごとに自動解放されたメモリの32バイトの行に沿ったものを作成することです。大多数の用途では、これはまったく問題になりません。両方とも非常に高速であり、副作用として何の自動解放のメモリを使用していませんNSStringからunsignedLongLongValueようなものを追加する方法の例については

は、 this SO questionに私の(長い)の答えの最後を見てみましょう。具体的にはの実装例です。 unsignedLongLongValueを実装するためには簡単な変更が必要です。

strtoullに関する詳細は、マニュアルページを参照してください。

+1

優れた答え。また、文字をローカルの一時C文字列に読み込むこともできます(文字はすべて数字であり、UTF-8やUnicodeの問題はありません)。そしてstrtoullを使用すると説明されている欠点を避けることができますが、あなたの欠点が実際問題であった奇妙なケース。 –

+0

NSStringオブジェクトのunsignedLongLongValueメソッドはありません – Gargo

+0

NSStringからの符号なしの値の読み取りをサポートするには、http://bugreport.apple.comにアクセスして、コンポーネントのFoundationにradar:// 2264733を添付してください。 X '。 –

関連する問題