NSData to NSString возвращает Null
Я искал. Но все равно не смог получить его.
Я конвертирую NSdata в NSString.
Когда я делаю [data description];
он возвращает меня < 00000000 31323334 35363738 > Да, я получаю мою строку @ "12345678".
Как мне соответствующим образом преобразовать его в NSString?
Я попробовал
NSString *b = [NSString stringWithUTF8String:[data bytes]];
NSString *a = [[NSString alloc] initWithBytes:[data bytes] length:[data length] encoding:NSUTF8StringEncoding];
Оба возвращают мне null.
Есть идеи?
Благодаря
Привет всем,
Спасибо за все предложения.
Он, как представляется, является постоянным, когда всегда существует нулевой символ.
Поэтому всякий раз, когда я получаю что-то, я просто удаляю первый < 00000000 > , а затем его рабочий режим уже
Ответы
Ответ 1
Это происходит, если кодировка неверна.
Попробуйте использовать ASCII для тестирования. ASCII почти наверняка работает, чтобы извлечь somekind строки. Если он только цифры, он, вероятно, будет работать.
NSString *a = [[NSString alloc] initWithBytes:[data bytes] length:[data length] encoding:NSASCIIStringEncoding];
Наиболее распространенными, за исключением UTF-8, являются:
NSASCIIStringEncoding
NSUnicodeStringEncoding
NSISOLatin1StringEncoding
NSISOLatin2StringEncoding
NSSymbolStringEncoding
попробуйте их и посмотрите, работают ли они.
Ответ 2
Я конвертирую NSdata в NSString. Когда я делаю [описание данных]; Это возвращает мне < 00000000 31323334 35363738 > Да, я получаю свою строку @ "12345678".
Нет - вы не получаете эту строку. Вы получаете байтовую последовательность, которая начинается с пучка значений 0x00 и сопровождается рядом байтов, которые соответствуют последовательности ASCII "12345678".
т.е. у вас есть необработанные данные и они пытаются преобразовать его в ограниченный тип, но не могут, потому что ограниченный тип не может представлять необработанные данные.
Вы можете попробовать использовать API-интерфейсы с потерянным преобразованием в NSString, но это может не работать и будет хрупким в любом случае.
Лучшая ставка?
Преобразуйте только байты в NSData, которые фактически представляют строку для экземпляра NSString. Это можно сделать с помощью -initWithBytes:length:encoding:
; вам нужно будет выполнить вычисления, чтобы найти правильное смещение и длину.
Ответ 3
Это может быть потому, что первые байты ваших данных равны 00. Символ 0 - это конец символа строки. При создании строки из ASCII (из массива символов или массива байтов, как вы это делаете), когда символ 0 встречается в начале, он создает пустую строку.
Я бы ожидал, что он вернет экземпляр NSString с 0 символами, а не null.