Преобразование NSString, выражения типа данных, в фактический NSData - PullRequest
0 голосов
/ 10 марта 2012
NSString *string1 = @"<616263>";

I want to make this into NSData *data1 = <616263>;

так что когда я

NSString *string2 = [[NSString alloc] initWithData:data1 encoding:NSUTF8StringEncoding];

NSLog (@ "% @", string2);

Результат: abc

выйдет

приписка

<616263>, это выражение данных @ "abc"

1 Ответ

2 голосов
/ 10 марта 2012

Трюк конвертирует 616263 в abc.Так как вы начинаете с ASCII-представления кодов символов, вам необходимо преобразовать вашу NSString в массив байтов (или ваш исходный источник данных в массив вместо того, чтобы сохранять его как NSString в первую очередь).

NSString *string1 = @"616263";

// Make sure that buffer is big enough!
char sourceChars[7];
[string1 getCString:sourceChars maxLength:7 encoding:NSUTF8StringEncoding];

char destBuffer[3];
char charBuffer[3];

// Loop through sourceChars and convert the ASCII character groups to char's
// NOTE:  I assume that these are always two character groupings per your example!
for (int index = 0; index < [string1 length]; index = index + 2) {
    // Copy the next two digits into charBuffer
    strncpy(charBuffer, &sourceChars[index], 2);
    charBuffer[2] = '\0';
    // convert charBuffer (ie 61) from hex to decimal
    destBuffer[index / 2] = strtol(charBuffer, NULL, 16);
}

// destBuffer is properly formatted:  init data1 with it.
NSData *data1 = [NSData dataWithBytes:destBuffer length:[string1 length]/2];

// Test
NSString *string2 = [[NSString alloc] initWithData:data1 encoding:NSUTF8StringEncoding];
NSLog(@"%@", string2);  // Prints abc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...