Что вы подразумеваете под «двоичным выходом», неясно. Если вы ожидаете, что строка будет содержать текст вдоль строк «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]];
}