2017-01-30 61 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

相关问题