将Hex的字符串转换为文本的NSString?

时间:2011-06-29 03:10:15

标签: iphone objective-c nsstring ascii hex

我需要将十六进制值的NSString转换为文本的NSString(ASCII)。 例如,我需要类似的东西:

"68 65 78 61 64 65 63 69 6d 61 6c" to be "hexadecimal"

我已经查看并调整了this thread中的代码,但它对我不起作用。它仅适用于一对十六进制。与空间有关?任何提示或示例代码都非常感谢。

3 个答案:

答案 0 :(得分:8)

我会为你的目的修改同样的东西。

NSString * str = @"68 65 78 61 64 65 63 69 6d 61 6c";
NSMutableString * newString = [NSMutableString string];

NSArray * components = [str componentsSeparatedByString:@" "];
for ( NSString * component in components ) {
    int value = 0;
    sscanf([component cStringUsingEncoding:NSASCIIStringEncoding], "%x", &value);
    [newString appendFormat:@"%c", (char)value];
}

NSLog(@"%@", newString);

答案 1 :(得分:6)

您可以使用NSScanner来获取每个角色。需要空格来分隔每个值,否则扫描仪将继续扫描并忽略其他数据。

- (NSString *)hexToString:(NSString *)string {
    NSMutableString * newString = [[NSMutableString alloc] init];
    NSScanner *scanner = [[NSScanner alloc] initWithString:string];
    unsigned value;
    while([scanner scanHexInt:&value]) {
        [newString appendFormat:@"%c",(char)(value & 0xFF)];
    }
    string = [newString copy];
    [newString release];
    return [string autorelease];
}

// called like:
NSLog(@"%@",[self hexToString:@"68 65 78 61 64 65 63 69 6d 61 6c"]);

答案 2 :(得分:0)

在我的情况下,源字符串没有分隔符,例如'303034393934'这是我的解决方案。

SQL> SELECT val, vsize(val), dump(val) FROM t ORDER BY val DESC;

             VAL       VSIZE(VAL) DUMP(VAL)
---------------- ---------------- --------------------------------------
 123456789012345                9 Typ=2 Len=9: 200,2,24,46,68,90,2,24,46
           12345                4 Typ=2 Len=4: 195,2,24,46
            1234                3 Typ=2 Len=3: 194,13,35
              12                2 Typ=2 Len=2: 193,13
               1                2 Typ=2 Len=2: 193,2
             -12                3 Typ=2 Len=3: 62,89,102

6 rows selected.