如何将NSData转换为NSString或char?

时间:2012-02-09 06:57:47

标签: iphone objective-c

我有一个包含< 7e0006b5 01012605 06070172 7a>的NSData实例,如何将其转换为包含@“7e0006b501012605060701727a”的NSString?

我的测试代码是:

char c_command[26] = {'7', 'e', '0', '0', 
                      '0', '6', 'b', '5', 
                      '0', '1', '0', '1', 
                      '2', '6', '0', '5', 
                      '0', '6', '0', '7', 
                      '0', '1', '7', '2', 
                      '7', 'a'};
NSMutableData *commandToSend  = [[NSMutableData alloc] init];

for (int i = 0; i < 13; i++) {
    unsigned char data_byte;
    char byte_chars[3] = {'\0','\0','\0'};
    byte_chars[0] = c_command[i * 2];
    byte_chars[1] = c_command[i * 2 + 1];
    data_byte = strtol(byte_chars, NULL, 16);
    [commandToSend appendBytes:&data_byte length:1];
}
NSString *str = [[NSString alloc] initWithData:commandToSend encoding:NSASCIIStringEncoding];
NSLog(@"Test command is :%@ \n command to string is:%@", commandToSend, str);

日志的输出是:

Test command is :<7e0006b5 01012605 06070172 7a> command to string is:~

4 个答案:

答案 0 :(得分:3)

NSString *theString =[[NSString alloc]initWithData:data encoding:NSStringEncodingConversionAllowLossy];
    NSLog(@"%@",theString);
    [theString release];

答案 1 :(得分:1)

如果从Internet下载数据,您可能需要使用:

NSString *str = [[NSString alloc] initWithData:NSData encoding:NSASCIIStringEncoding];

答案 2 :(得分:1)

NSString有许多从字节创建字符串的方法,但您需要知道数据是如何编码的。 UTF8是一种流行的编码,如果您的数据是UTF8编码,您可以:

NSString *someString = [NSString stringWithUTF8String:(const char *)[someData bytes]];

还有其他方法,例如-initWithCharacters:length:-initWithBytes:length:encoding:

首先查看reference page for NSString

答案 3 :(得分:0)

我发现有时来自-stringWithUTF8String:(const char*)的方法NSString与NSData或NSMutableData一起工作得太好了。让我们有类似

的内容
const char * cString = [yourNSData bytes];

NSString * str = [NSString stringWithUTF8String:(const char*)cString];

有时str只是nil,因为cString不知何故&#34;格式错误&#34; (考虑UTF-8字符)。

因此,我建议使用

NSString * str = [[NSString alloc] initWithData:[yourNSData bytes] encoding:NSUTF8StringEncoding];
在我的情况下,

总是很完美。