Как преобразовать NSString * в ANTLR3_UINT8 или ANTLR3_UINT16 - PullRequest
3 голосов
/ 22 апреля 2010

Может кто-нибудь сказать мне, как правильно преобразовать NSString * в строку ANTLR3 (используется в C)?

РЕДАКТИРОВАТЬ: кажется, работает

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

1 Ответ

0 голосов
/ 12 мая 2010

Предполагая, что вы хотите получить полную строку без потерь, вы можете использовать следующий код:

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);

Конечно, вы можете использовать другую кодировку, если потеря символа не важна.

...