2010-04-22 72 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