Integer.parseInt (String s, int radix) эквивалент в Objective C

1

У меня есть эта функция в Java:

private String hexStringToByteString(String s) {

    String r = "";

    for (int i = 0; i < s.length(); i += 2)
        r += (char) Integer.parseInt(s.substring(i, i + 2), 16);   

    return r;
}

и должен реализовать это в Objective C, потому что я разрабатываю приложение и должен делать некоторые шифровки. Проблема в том, что я не знаю, как сделать часть Integer.parseInt, передав в функцию String и radix int. Некоторая помощь будет большой.

Теги:
algorithm

1 ответ

0
NSString r = @""; 
r = [r stringByAppendingString: [ [s substringWithRange:NSRangeMake(i, i + 2)] intValue]]; 

Или:

NSMutableString r = @""; 
[r appendingString: [ [s substringWithRange:NSRangeMake(i, i + 2)] intValue]]; 

Просто я считаю, что есть лучшие способы добиться того же. Можете ли вы предоставить немного больше о том, что s содержит в себе и то, что вы собираетесь достичь? например, когда это делается только для того, чтобы избавиться от пробелов, тогда будет выполняться следующее: даже без цикла for.

NSMutableString r = [NSMutableString stringWithString:s];
[r replaceOccurrencesOfString:@" " withString:"" options:NSLiteralSearch range:NSMakeRange(0, [s length])];

Редактировать в ответ на ваш комментарий. Но будьте осторожны. Используйте это только как отправную точку. Я никогда раньше этого не делал. Там могут быть лучшие решения, и это может содержать незначительные ошибки.

- (NSString) hexStringToByteString(NSString s) {

  NSMutableData d = [NSData dataWithLength: [s length] / 2];

  NSUInteger v; 

  for (int i = 0, i < [s length], i+=2) {
    NSScanner *scanner = [NSScanner scannerWithString:[s substringWithRange:NSRangeMake(i, i + 2)]];

    [scanner scanHexInt:&v];

    [d appendBytes:&v length:1];
  }

  NSData r = [[NSString alloc] initWithData:d encoding:NSUTF8StringEncoding];
  return r;
}

Конечно, вы можете выбрать другую кодировку.

  • 0
    Я просто пытаюсь передать шестнадцатеричную строку в десятичную строку.
  • 0
    Извинения Я пропустил параметр radix по некоторым причинам. Учитывая, что мой ответ не правильный.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню