2011-06-26 6 views
1

J'ai mis en place un code pour convertir un NSString de « texte » à un NSString de (ASCII) ints, comme ceci:Aide avec NSString de int à NSString de caractères ASCII?

@"Hello" is converted to @"72 101 108 108 111" 

Cependant, je vais avoir un peu de difficulté à faire le contraire. Commençant par une chaîne d'ints (avec les espaces) et la conversion à la chaîne de texte simple.

What I need: @"72 101 108 108 111" must be converted to @"Hello" 

J'ai essayé briser la chaîne d'entrée dans un tableau int, itérer, et en utilisant à plusieurs reprises les éléments suivants:

[NSString stringWithFormat:@"%c", decCharArray[i]] 

Cependant, le problème qui est qu'il parse chaque chiffre particulier en ASCII, convertissant le 7, le 2, l'espace, le 1, etc.

Merci beaucoup à l'avance.

+0

Il semble que le problème est la conversion de la chaîne en un tableau d'ints. Pouvez-vous montrer ce code? Aussi, qu'essayez-vous de faire? Je suppose que ce n'est pas la bonne chose, à moins que vous soyez en train d'apprendre. – djromero

Répondre

0

Il n'y a pas de véritable magie là-dessus. Puisque vous allez utiliser ASCII, pour convertir un int à un omble chevalier tout ce que vous avez à faire est une mission, comme vous le savez peut-être:

char a = 65; /* a contains 'A' */ 

NSString a une méthode très pratique componentsSeparatedByString: que retourne un tableau de chaînes contenant vos numéros, et vous pouvez obtenir un int à partir d'une chaîne avec la méthode intValue. Ainsi, tout ce que vous avez à faire est de diviser la chaîne et de parcourir les composants en leur attribuant la valeur int à un tableau . Voici un exemple de fonction qui fait que:

NSString * 
TextFromAsciiCodesString (NSString *string) 
{ 
    NSArray *components = [string componentsSeparatedByString:@" "]; 
    NSUInteger len = [components count]; 
    char new_str[len+1]; 

    int i; 
    for (i = 0; i < len; ++i) 
     new_str[i] = [[components objectAtIndex:i] intValue]; 

    new_str[i] = '\0'; 

    return [NSString stringWithCString:new_str 
           encoding:NSASCIIStringEncoding]; 
} 

et un simple usage, avec votre "Hello" exemple:

NSString *string = @"72 101 108 108 111"; 
NSLog(@"%@", TextFromAsciiCodesString(string)); 

En fait, il est un peu différent que votre exemple était "Hell^K" :-)

1

On dirait que vous avez la bonne approche. Essayez d'utiliser [string componentsSeparatedByString:@" "] pour diviser la chaîne dans les espaces. Ensuite, vous pouvez convertir chacun d'entre eux en nombres, et de nouveau en chaînes.

0

Vous pouvez également essayer d'utiliser NSStringenumerateSubstringsInRange:options:usingBlock:.

Utilisation

NSString * hello = @"72 101 108 108 111"; 

NSMutableString * result = [NSMutableString string]; 
[hello enumerateSubstringsInRange:NSMakeRange(0, [data length]) 
          options:NSStringEnumerationByWords 
         usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) { 
          [result appendString:[NSString stringWithFormat:@"%c", [substring intValue]]]; 
         }]; 

NSLog(@"%@", result);