如何将字符串转换为十六进制值并从十六进制值返回字符串

时间:2017-01-30 19:01:27

标签: ios objective-c int hex unsigned

我有一个场景,我想将字符串转换为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。

1 个答案:

答案 0 :(得分: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;
}

//来自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;
    }