NSData для NSString и наоборот - PullRequest
1 голос
/ 22 января 2012

Моему пользователю предлагается ввести в RAW NSData (например: <0201581d 9fc84f7b bf136a80 e7fc9572>)

Эти необработанные данные представляют собой зашифрованную строку AES.

Однако проблема заключается в преобразовании этих фактических байтов данных <0201581d 9fc84f7b bf136a80 e7fc9572> в сам тип NSData.

  1. Запрашивается ввод данных
  2. Ввод данных -> @ "<0201581d 9fc84f7b bf136a80 e7fc9572>"
  3. Необходимо преобразовать введенные данные в тип NSData, а не в строку NSString, которая была передана.

Короче говоря; Как мне сделать это: <0201581d 9fc84f7b bf136a80 e7fc9572> в данные NSData? Создание целого числа для хранения данных HALF работает (потому что тип слишком короткий), поэтому он должен быть строкой NSString.

Ответы [ 3 ]

3 голосов
/ 22 января 2012

Чтобы преобразовать шестнадцатеричную строку в данные, см. Функцию, которую я разместил здесь: Преобразование шестнадцатеричной строки в двоичную в Objective-C

Вы захотите слегка изменить ее, чтобысимволы в скобках и пробел.

Чтобы перейти в другом направлении:

NSString *CreateHexStringWithData(NSData *data)
{
    NSUInteger inLength = [data length];
    unichar *outCharacters = malloc(sizeof(unichar) * (inLength * 2));

    UInt8 *inBytes = (UInt8 *)[data bytes];
    static const char lookup[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };

    NSUInteger i, o = 0;
    for (i = 0; i < inLength; i++) {
        UInt8 inByte = inBytes[i];
        outCharacters[o++] = lookup[(inByte & 0xF0) >> 4];
        outCharacters[o++] = lookup[(inByte & 0x0F)];
    }

    return [[NSString alloc] initWithCharactersNoCopy:outCharacters length:o freeWhenDone:YES];
}

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

[NSString stringWithFormat:@"%@", data]

, чтобы использовать - [Описание NSData], чтобы получитьверсия со скобками и пробелами.

2 голосов
/ 22 января 2012

Это очень похоже на NSString (hex) в байтах .Ответ там будет работать для вас, если вы удалите лишнюю пунктуацию.

0 голосов
/ 10 июня 2016

Для преобразования NSData в NSString используйте:

NSData* returnData;
NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];

Чтобы преобразовать NSString в NSData, используйте:

NSString* str = @"returnString";
NSData* data = [str dataUsingEncoding:NSUTF8StringEncoding];
...