Подтвердить что ты не робот

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 > , а затем его рабочий режим уже

4b9b3361

Ответ 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.