Как вы конвертируете NSData в NSString или char? - PullRequest
1 голос
/ 09 февраля 2012

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

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

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 ]

3 голосов
/ 09 февраля 2012
NSString *theString =[[NSString alloc]initWithData:data encoding:NSStringEncodingConversionAllowLossy];
    NSLog(@"%@",theString);
    [theString release];
1 голос
/ 09 февраля 2012

NSString имеет несколько методов для создания строк из байтов, но вам нужно знать, как кодируются данные.UTF8 является популярной кодировкой, и если ваши данные кодируются в UTF8, вы можете:

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

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

глядя на справочную страницу для NSString .

1 голос
/ 09 февраля 2012

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

NSString *str = [[NSString alloc] initWithData:NSData encoding:NSASCIIStringEncoding];
0 голосов
/ 02 апреля 2013

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

const char * cString = [yourNSData bytes];

и

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

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

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

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

, который всегда работал идеально в моем случае.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...