如何将填充了十六进制值的NData转换为NSString

时间:2012-10-25 20:56:10

标签: ios nsstring nsdata nslog

我有一个NSdata对象,其中填充了一组以十六进制格式化的信息。我正在尝试将其转换为正确的字符串表示形式,但我正在努力取得任何成功。

我尝试过的一件事就是简单地把它放入一个NSString,然后用一个特殊的字符标识符来对它进行NSLog ..忘了这个词(%02x),但是为了做到这一点,我将它编码为NSUTF16 ..其中我不想这么做..我非常希望看到我得到的数据看起来像是一个NSString。

我这样做的原因是因为我的代码后来我的编码出现了一些问题而且我不确定是否因为我收到的数据不正确或我在处理时的某些时候填写了它

任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:1)

您可以获得NSData的字符串表示形式,如下所示:

NSData *data = (your data)
NSString *string = [NSString stringWithCString:[data bytes] encoding:NSUTF8StringEncoding];

这会回答你的问题吗?

答案 1 :(得分:0)

也许我没有理解,但是这样的事情:

NSData *yourData;
NSLog(@"%@", [yourData description]);

不适合您的需要?

答案 2 :(得分:0)

试一试 -

-(NSString*)hexToString:(NSData*)data{
    NSString *hexString = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
    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:@"%d", decimalValue];
    }

    return string;
}