C 字串與 NSString 互轉

C 字串與 NSString 互轉

C 字串(String)使用的是 char 類型,將每個char串連起來利用指標型式成為字串,Objective-C使用的是NSString,它是利用物件的方式存放整個字串,預設是使用Unicode 16bit存放,通常叫他 unichar ,所以在C String與NSString中間需要轉換,下面範例會介紹兩種互轉的方式。

  • NSString to C String (NSString to String)

Apple官方NSString Class文件中有提到UTF8String的NSString method,轉換完成後會在最後加個NULL當做字串的結尾,也符合C字串陣例的存放原則。

UTF8String
Returns a null-terminated UTF8 representation of the receiver.

所以:

//-----------start-----------
NSString nstr=@"Danny123";
const char *str=[nsstr UTF8String];
//------------end------------

  • C String to NSString (String to NSString)

方法1:

Apple官方NSString Class文件中有提到stringWithUTF8String,轉換後會返回使用UTF8編碼的C陣列。

stringWithUTF8String:
Returns a string created by copying the data from a given C array of UTF8-encoded bytes.

程式:

//-----------start-----------
NSString *new_nstr=[NSString stringWithUTF8String:databaseName];
//------------end------------

方法2:

Apple官方NSString Class文件中有提到stringWithCString:encoding,轉換後會返回使用指定編碼的C陣列。

stringWithCString:encoding:
Returns a string containing the bytes in a given C array, interpreted according to a given encoding.

程式:

//-----------start-----------
   NSString *new_nstr=[NSString stringWithCString:databaseName encoding:NSUTF8StringEncoding];
//------------end------------

在Objective-C中的C String存放都是以UTF-8編碼,所以整個轉換過程必需要以UTF-8為主。