2017-01-30 3 views
-2

У меня есть сценарий, где я хочу, чтобы преобразовать строку в HexValue и извлечение строку из HexValueКак преобразовать строку в шестнадцатеричное значение и получить строку обратно от шестнадцатеричного значения

Для, например, у меня есть строка со значением '33 ' в этом . Поэтому, когда я конвертирую его в шестнадцатеричный, я получаю результат как «21», а когда я конвертирую «21», то есть шестнадцатеричное значение обратно в строку, я должен получить «33» назад в качестве вывода.

Ниже приведен код, который я сделал для преобразования строки в шестнадцатеричном

+ (NSString *) hexValue:(NSString *)str { 
    return [NSString stringWithFormat:@"%lX", 
      (unsigned long)[str integerValue]]; 
} 

так, когда я передаю «33» к этому методу возвращается «21», который является правильным , но проблема в том, что я хочу получить «33» назад от «21»

Ниже приведен код

+ (NSString *) unHexValue:(NSString *)str { 
    return [NSString stringWithFormat:@"%@",str]; 
} 

но это не возвращает ожидаемое значение, которое «33». Вместо этого он возвращает только 21.

+0

Посмотрите на раздел Unix командной strtol 3 библиотеки() –

+0

Чтобы справиться с этим в какао (а не C), посмотрите на «NSScanner». HTH – CRD

ответ

0

Он работает для меня и способен получить тот же результат. Надеюсь, он вам поможет.

NSString *strHex = [self hexfromString:@"33"]; 
NSString *newStr = [self stringFromHexString:strHex]; 

// Hex из строки

- (NSString *)hexfromString:(NSString *)str 
{ 
    NSUInteger len = [str length]; 
    unichar *chars = malloc(len * sizeof(unichar)); 
    [str getCharacters:chars]; 

    NSMutableString *hexString = [[NSMutableString alloc] init]; 

    for(NSUInteger i = 0; i < len; i++) 
    { 
     // [hexString [NSString stringWithFormat:@"%02x", chars[i]]]; /*previous input*/ 
     [hexString appendFormat:@"%02x", chars[i]]; /*EDITED PER COMMENT BELOW*/ 
    } 
    free(chars); 

    return hexString; 
} 

// строка из шестнадцатеричной

- (NSString *)stringFromHexString:(NSString *)hexString { 

     // The hex codes should all be two characters. 
     if (([hexString length] % 2) != 0) 
      return nil; 

     NSMutableString *string = [NSMutableString string]; 

     for (NSInteger i = 0; i < [hexString length]; i += 2) { 

      NSString *hex = [hexString substringWithRange:NSMakeRange(i, 2)]; 
      NSInteger decimalValue = 0; 
      sscanf([hex UTF8String], "%x", &decimalValue); 
      [string appendFormat:@"%c", decimalValue]; 
     } 

     return string; 
    } 
+0

К сожалению, ваши методы не выполняют то, что требует OP - ваш код преобразует произвольную строку в шестнадцатеричное представление каждого символа UTF-16, OP хочет преобразовать десятичные и шестнадцатеричные числа, сохраненные в виде строк. Также есть 4 шестнадцатеричных цифры на 'unichar' not 2, поэтому ваш код будет терпеть неудачу для некоторых символов. – CRD

Смежные вопросы