2012-02-09 4 views
1

У меня есть экземпляр NSData, содержащий < 7e0006b5 01012605 06070172 7a>, как я могу преобразовать его в NSString, содержащий @ "7e0006b501012605060701727a"?Как преобразовать NSData в NSString или char?

Мой тестовый код:

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:~ 

ответ

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

Если данные загружаются из Интернета вы, вероятно, хотите использовать:

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

Но он не загружается из Интернета. Это шестнадцатеричное перемещение, отправленное SCM – Jabez

1

NSString имеет ряд методов для создания s trings from bytes, но вам нужно знать, как кодируются данные. UTF8 является популярным кодирование, и если данные UTF8 кодируются вы можете:

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

Существуют и другие методы, например, такие, как -initWithCharacters:length: и -initWithBytes:length:encoding:.

Начать поиск reference page for NSString.

0

Я выяснил, что иногда метод -stringWithUTF8String:(const char*) от NSString не работает слишком хорошо в сочетании с NSData или NSMutableData. Давайте что-то вроде

const char * cString = [yourNSData bytes]; 

и

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

str Иногда просто потому, что nilcString было как-то "неправильный формат" (учитывая UTF-8 символов).

Таким образом, я бы рекомендовал использовать

NSString * str = [[NSString alloc] initWithData:[yourNSData bytes] encoding:NSUTF8StringEncoding]; 

, который работал идеально ВСЕГДА в моем случае.

Смежные вопросы