我有一个包含< 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:~
答案 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:
。
答案 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];
在我的情况下,总是很完美。