web-dev-qa-db-ja.com

NSStringをchar配列に変換します

char[]の変数があり、その中にNSString値をコピーしたい。 NSStringをchar配列に変換するにはどうすればよいですか?

47
sagar

つかいます - -[NSString UTF8String]

NSString *s = @"Some string";
const char *c = [s UTF8String];

-[NSString cStringUsingEncoding:] 文字列がUTF-8以外でエンコードされている場合。


const char *charsの配列と同様に作業できます。

printf("%c\n", c[5]);

文字列を変更する場合は、コピーを作成します。

char *cpy = calloc([s length]+1, 1);
strncpy(cpy, c, [s length]);
// Do stuff with cpy
free(cpy);
97
mipadi
NSMutableArray *array = [NSMutableArray array];
for (int i = 0; i < [string length]; i++) {
    [array addObject:[NSString stringWithFormat:@"%C", [string characterAtIndex:i]]];
}
10
adjwilli

文字列の内容を含むchar*が必要な場合はmipadiの答えが最適ですが、NSStringは自分で割り当てたバッファにデータを取得するメソッドを提供します。たとえば、次のように getCharacters:range: を使用して、文字をunicharの配列にコピーできます。

NSUInteger length = [str length];
unichar buffer[length];

[str getCharacters:buffer range:NSMakeRange(0, length)];

for (NSUInteger i = 0; i < length; i++)
{
    doSomethingWithThis(buffer[i]);
}

charを使用する必要がある場合は、より複雑な getBytes:maxLength:usedLength:encoding:options:range:remainingRange: を使用できます( 東ポーランドクリスマスツリー 表記で示します)。

NSUInteger length = [str length];
NSUInteger bufferSize = 500;

char buffer[bufferSize] = {0};

[str       getBytes:buffer
          maxLength:(bufferSize - 1)
         usedLength:NULL
           encoding:NSUTF8StringEncoding
            options:0
              range:NSMakeRange(0, length)
     remainingRange:NULL];
9
dreamlax

のではなく getCharacters:range:、 私が使う:

[stringToCopy getCString:c_buffer maxLength:c_buffer_length encoding:NSUTF8StringEncoding];

結果はchar []nichar []の代わり)であり、これはOPが望んでいたものであり、おそらくC互換性のために使用したいものです。

3

NSStringをコーディングプラクティスに取り組むための文字配列として再生する必要があります。 characterAtIndex:およびappendFormat:を使用すると役立ちます。これが役立つかもしれません。

NSString *str = @"abcdef";
NSMutableString *strResult = [NSMutableString string];

for (NSUInteger i = 0; i < [str length]; i++) {
  char ch = [str characterAtIndex:i];
  [strResult appendFormat:@"%c", ch];
}
NSLog(@"%@", strResult);
0
Debaprio B

Swiftでは、char配列はUnsafePointer<Int8>としてブリッジされます。 NSStringの場合、Swift)での文字へのアクセスは同じように機能します。

let str: NSString = "hello"
let charStr = str.UTF8String // UnsafePointer<Int8>

Swift Stringオブジェクトの場合は少し異なります:

let str = "hello"
let charStr = str.cStringUsingEncoding(NSUTF8StringEncoding)

charStr[CChar]?です。CCharInt8のタイプです。

0
JAL