У меня есть эта функция в 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. Некоторая помощь будет большой.
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;
}
Конечно, вы можете выбрать другую кодировку.
strtol