2010-04-22 70 views
3

有人能告訴我什麼是將NSString *轉換爲ANTLR3字符串(在C中使用)的正確方法?如何將NSString *轉換爲ANTLR3_UINT8或ANTLR3_UINT16

編輯:這似乎工作

char buf[255]; 
    if (YES == [myNSString getCString:buf maxLength:255 encoding:NSStringEncodingConversionAllowLossy]) 
    { 
     pANTLR3_UINT8 theExpression = (pANTLR3_UINT8*)buf; 
     ... 
+1

這樣做是強制轉換爲ASCII。 'encoding:'參數需要一個字符串編碼值(指定要使用的字符集),但是您傳遞的值(NSStringEncodingConversionAllowLossy)是一個「編碼轉換選項」。 「NSStringEncodingConversionAllowLossy」的值爲1,等於「NSASCIIStringEncoding」,即「在8位字符內嚴格的7位ASCII編碼;僅限ASCII值0 ... 127」。 – 2010-04-23 04:33:39

+0

謝謝,是的,我知道我正在進行轉換,但至今我還沒有找到任何更好的方法,是嗎? – 2010-04-23 04:56:36

回答

0

假設你想不損失完整的字符串,可以使用下面的代碼:

NSString *myString = ...; 
NSUInteger len = [myString lengthOfBytesUsingEncoding:NSUTF8StringEncoding]; 
char *buf = malloc(len + 1); 
if ([myString getCString:buf maxLength:(len + 1) encoding:NSUTF8StringEncoding]) { 
    // pANTLR3_UINT8 is equivalent to ANTLR3_UINT8* 
    pANTLR3_UINT8 theExpression = (pANTLR3_UINT8) buf; 
} 
free(buf); 

當然你也可以使用其他的編碼,如果字符損失並不重要。

+0

經過一番嘗試,我得到了同樣的結果,不過謝謝。 – 2010-05-12 11:43:48