2013-06-19 3 views
1

У меня есть массив символов uint_8 [], и я бы хотел преобразовать его в NSString, но я возвращаю NULL. Каков правильный способ преобразования между этими двумя типами?Копирование содержимого uint8_t [] в NSString

// Defined else where as: 
uint8_t someValue[8]; 

SomeValue не NULL и содержит некоторые допустимые символы

я пробовал:

NSLog(@"converted using CString: %@", [NSString stringWithCString:(char const *)someValue encoding:NSUTF8StringEncoding]); 

, а также:

NSMutableData *data = [[NSMutableData alloc] init]; 
[data appendBytes:someValue length:sizeof(someValue)]; 
converted = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 

NSLog(@"converted using NSData: %@", converted); 
+2

Является ли содержимое 'someValue' завершенным нулем? – dasblinkenlight

+0

'someValue' - массив - как он может быть NULL? –

ответ

2

Использование:

[NSString stringWithCString:(char const *)someValue encoding:NSUTF8StringEncoding]; 

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

Ваше другое решение не работает, потому что sizeof(someValue) не возвращает количество символов в массиве, оно возвращает размер указателя uint8_t.

Вы можете использовать:

NSUInteger len = ... // the actual number of characters in someValue 
NSString *str = [[NSString alloc] initWithBytes:someValue length:len encoding:NSUTF8StringEncoding]; 

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

+0

Я получаю длину, используя: size_t len ​​= sizeof (someValue)/sizeof (someValue [0]); содержимое SomeValue: (uint8_t) [0] = '\ xb3' [1] = '\ x90' [2] = '0' [3] = '\ 0' [4] = ' \ 0 ' [5] =' \ n ' [6] =' \ xa3 ' [7] =' \ x18 ' –

+0

@Will (Должен ли я стрелять?) - эта строка содержит нули, и это будет мешать большинству переводы в UTF. Что представляет строка? Предполагается ли это символьные данные или что-то еще? (Вы должны помещать только персональные данные в NSString.) –

+0

'' \ xb3'' не является началом какой-либо действительной последовательности UTF-8, поэтому любое преобразование в NSString с 'encoding: NSUTF8StringEncoding' немедленно завершится неудачей. –

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