2010-04-22 8 views
3

Quelqu'un pourrait-il me dire quelle est la bonne façon de convertir un NSString * en une chaîne ANTLR3 (utilisée en C)?Comment convertir NSString * en ANTLR3_UINT8 ou ANTLR3_UINT16

EDIT: cela semble fonctionner

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

Ce que cela fait est de forcer une conversion en ASCII. Le paramètre 'encoding:' attend une valeur de codage de chaîne (spécifiant quel jeu de caractères utiliser), mais ce que vous lui transmettez (NSStringEncodingConversionAllowLossy) est une "option de conversion d'encodage". La valeur de "NSStringEncodingConversionAllowLossy" est 1, ce qui correspond à "NSASCIIStringEncoding", qui est "Encodage ASCII 7 bits strict dans les caractères de 8 bits, valeurs ASCII 0 ... 127 uniquement". –

+0

merci, oui je sais que je fais une conversion mais jusqu'à présent, je n'ai pas trouvé de meilleure façon, est-il? –

Répondre

0

En supposant que vous voulez que la chaîne complète sans perte, vous pouvez utiliser le code suivant:

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

Bien sûr, vous pouvez utiliser un autre encodage si le caractère la perte n'est pas importante.

+0

après quelques expérimentations j'ai eu à peu près le même, merci quand même. –