2017-01-30 111 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部3庫命令與strtol() –

+0

爲了在可可處理這種(而不是C庫函數)查看'NSScanner'。 HTH – CRD

回答

0

它正在爲我工​​作,並能夠獲取相同的結果。希望它會幫助你。

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

//十六進制字符串從

- (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希望在存儲爲字符串的十進制和十六進制數字之間進行轉換。每個'unichar'還有4個十六進制數字不是2,所以你的代碼會失敗的一些字符。 – CRD

相關問題