包含hex的NSString转换为ascii等价物

时间:2013-03-07 16:35:21

标签: objective-c nsstring hex nsdata nsfilehandle

我有一个NSString,它有十六进制信息,如

<00000020 66747970 4d344120 00000000 4d344120 6d703432 69736f6d 00000000 00031203

来自NSData。我需要做的是将十六进制数据的NSString转换为Ascii,它将是:

[0][0][0] ftypM4A [0][0][0][0]M4A mp42isom[0][0][0][0][0][3][18][3] 

您可能会知道这是一个M4A文件。我使用NSFileHandle将文件的第一部分加载到NSData。然后我将它存储到NSString中:

NSData *data = [filehandle readDataOfLength:1000];
NSString *str = [[NSString alloc]initWithString:[NSString stringWithFormat:@"%@",data]];

任何人都知道如何直接转换NSData或将NSString转换为ascii?谢谢!

1 个答案:

答案 0 :(得分:8)

你应该做这样的事情:

NSData *_data = // ... whatever
NSMutableString *_string = [NSMutableString stringWithString:@""];
for (int i = 0; i < _data.length; i++) {
    unsigned char _byte;
    [_data getBytes:&_byte range:NSMakeRange(i, 1)];
    if (_byte >= 32 && _byte < 127) {
        [_string appendFormat:@"%c", _byte];
    } else {
        [_string appendFormat:@"[%d]", _byte];
    }
}
NSLog(@"%@", _string);