Помогите с NSString из int в NSString символов ASCII? - PullRequest
1 голос
/ 27 июня 2011

Я реализовал некоторый код для преобразования строки NSString «text» в строку NSString (ASCII), например:

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

Однако, я испытываю немало затруднений, поступая наоборот. Начиная со строки целых (с пробелами) и преобразовывая обратно в обычную строку текста.

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

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

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

Однако проблема в том, что он анализирует каждую конкретную цифру в ASCII, преобразуя 7, 2, пробел, 1 и т. Д.

Заранее большое спасибо.

Ответы [ 3 ]

1 голос
/ 27 июня 2011

Похоже, у вас правильный подход.Попробуйте использовать [string componentsSeparatedByString:@" "], чтобы разбить строку на пробелы.Затем вы можете преобразовать каждый из них в числа и обратно в строки.

0 голосов
/ 27 июня 2011

На нем нет настоящей магии. Поскольку вы будете использовать ASCII, для преобразования int char все, что вам нужно сделать, - это задание, как вы, возможно, уже знаете:

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

NSString имеет очень удобный метод componentsSeparatedByString:, который будет вернуть массив строк, содержащий ваши номера, и вы можете получить int из строки с помощью метода intValue. Таким образом, все, что вам нужно сделать, это разделить строку и итерацию по компонентам, присваивая их значение int char массив. Вот пример функции, которая делает это:

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];
}

И простое его использование с вашим примером "Hello":

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

На самом деле, это немного по-другому, так как ваш пример был "Hell^K": -)

0 голосов
/ 27 июня 2011

Вы также можете попробовать использовать NSString s enumerateSubstringsInRange:options:usingBlock:.

Использование

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