Search code examples
iosobjective-cnsdata

How can I convert NSData to C string?


How can I convert [NSString dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES] result to C string?

Returns an NSData object containing a representation of the receiver encoded using a given encoding.

- (NSData *)dataUsingEncoding:(NSStringEncoding)encoding allowLossyConversion:(BOOL)flag

Note that the data returned by dataUsingEncoding:allowLossyConversion: is not a strict C-string since it does not have a NULL terminator.


Solution

  • NSMutableData *data = [[@"foo" dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES] mutableCopy];
    char nul = '\0';
    [data appendBytes:&nul length:sizeof(nul)];
    const char *cString = [data bytes];
    

    Or, simply:

    const char *cString = [@"foo" UTF8String];
    

    ... with exactly the same result.