2012-03-22 15 views

答えて

6

unicharタイプは(間接的description of the %C specifierに記載されているように、例えば)16ビットのUnicode値になるように定義され、そしてあなたがcharacterAtIndex:を使用してNSString内の指定された位置からunicharを取得、または必要に応じgetCharacters:range:を使用することができますNSStringからunicharsのC配列を1つ1つずつクエリするよりも速く満たすことができます。

NSUTF32StringEncodingも有効な文字列エンコーディングであり、今後の絶対的な証明が必要な場合に備えて、いくつかのエンディアン固有のバリエーションもあります。より長い世代のgetBytes:maxLength:usedLength:encoding:options:range:remainingRange:を使用しているC配列を取得できます。

EDIT:so。

NSString *str = @"A"; 

NSLog(@"16-bit unicode values are:"); 
for(int index = 0; index < [str length]; index++) 
    NSLog(@"%04x", [str characterAtIndex:index]); 
+0

は、うーん、迅速な対応に感謝しますが、しかし、私がobj-Cに新たな種類のだ多くのためhere を参照してください。コードスニペット/サンプルの使用法を教えてください。 – citruspi

+0

私が 'code'NSString * hexValue = [NSString stringWithFormat:@"%C "、@" <"];' code'を実行したとき、私は棰 – citruspi

+0

を取得するので、 '@" <"'は文字列であり、 '%C'はリテラルを期待しています。 Objective-Cのオブジェクト指向の世界とCの文字通りの古い世界との間のフォールト・ラインに落ち着きました。オブジェクトを指定するには '%@'を使い、オブジェクトを指定するには '<'を使います。なぜなら、ソースコードのUnicode文字は、(NSStringは完全にUnicodeであるにもかかわらず、実行時の問題ではなくツールチェーンの問題だからです)コンパイル時に必ずしも生き残るわけではないからです。 – Tommy

3

あなたはあなたがまたはNSUTF32StringEncoding、または他の多くの値(NSUnicodeStringEncodingと同じ)NSUTF8StringEncoding、NSUTF16StringEncodingによってNSUnicodeStringEncodingを置き換えることが

NSData * u = [str dataUsingEncoding:NSUnicodeStringEncoding]; 
NSString *hex = [u description]; 

を使用することができます。

+0

クールな代替品。 'NSData'に関連するデータを保持する1つのアトミックなブロックのメモリが含まれているので、' bytes'プロパティを取得してCの配列として適切にキャストすることができます。 「長さ」に注意を払うように注意してください。これは自分のバッファを割り当て、 'getBytes:maxLength:... 'を使って32ビットUTFコードの配列を取得するよりはるかにクリーンな方法です。 – Tommy