Преобразование NSData в представление NSString не выполняется - PullRequest
1 голос
/ 16 марта 2010

У меня есть объект NSData, который я пытаюсь превратить в строку NSString, используя следующую строку кода:

NSString *theData = [[NSString alloc] initWithData:photo encoding:NSASCIIStringEncoding];

К сожалению, вместо желаемого двоичного вывода я получаю следующий результат (можно ли ожидать двоичный вывод здесь?);

ÿØÿà

Буду признателен за любую помощь.
Благодарю. Рикки.

Ответы [ 3 ]

4 голосов
/ 16 марта 2010

Если вы хотите преобразовать некоторые произвольные двоичные данные в удобочитаемую строку (например, из серии шестнадцатеричных значений), вы используете неправильный метод. То, что вы делаете, интерпретирует сами данные как строку в кодировке ASCII.

Чтобы просто записать данные в файл или на стандартный вывод, вы можете использовать [theData description].

2 голосов
/ 17 марта 2010

Что вы подразумеваете под «двоичным выходом», неясно. Если вы ожидаете, что строка будет содержать текст вдоль строк «01010100011110110» или «0x1337abef», вы ошибаетесь в том, как работает NSString. initWithData:encoding: NSString пытается интерпретировать байты данных, как если бы они были байтами строки в определенной кодировке. Это противоположно NSString dataUsingEncoding: - вы можете вызвать initWithData:encoding: с результатом dataUsingEncoding: и получить обратно ту же самую строку.

Если вы хотите преобразовать данные, скажем, в читаемую человеком строку из шестнадцатеричных цифр, вам нужно будет выполнить преобразование самостоятельно. Вы могли бы сделать что-то вроде этого:

NSMutableString *binaryString = [NSMutableString stringWithCapacity:[data length]];
unsigned char *bytes = [data bytes];
for (int i = 0; i < [data length]; i++) {
    [binaryString appendFormat:@"%02x", bytes[i]];
}
0 голосов
/ 16 марта 2010

Вы не можете анализировать двоичные данные с помощью метода initWithData :. Если вам нужна шестнадцатеричная строка содержимого, вы можете использовать метод description NSData.

...