2012-03-10 3 views

ответ

2

Уловки преобразование 616263 в АВС. Поскольку вы начинаете с представления 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 
+0

спасибо, что он работает :) –

+0

Добро пожаловать! – lnafziger

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