NSData到NSString,反之亦然

时间:2012-01-22 04:51:27

标签: objective-c nsstring aes nsdata

我的用户被提示输入RAW NSData(例如:< 0201581d 9fc84f7b bf136a80 e7fc9572>)

此原始数据是AES加密的NSString。

然而,问题在于转换那些实际的数据字节< 0201581d 9fc84f7b bf136a80 e7fc9572>进入NSData类型本身。

  1. 提示输入数据
  2. 输入数据 - > @“< 0201581d 9fc84f7b bf136a80 e7fc9572>”
  3. 需要将输入的数据输入NSData类型而不是传递的NSString。
  4. 总之;我如何做到这一点:< 0201581d 9fc84f7b bf136a80 e7fc9572>进入NSData的数据? 使整数保持数据HALF有效(因为类型太短)所以它需要是一个NSString。

3 个答案:

答案 0 :(得分:3)

要将十六进制字符串转换为数据,请参阅我在此处发布的函数: Converting a hexadecimal string into binary in 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 description]获取带括号和空格的版本。

答案 1 :(得分:2)

这与NSString (hex) to bytes非常相似。如果删除多余的标点符号,那么答案对你有用。

答案 2 :(得分:0)

要将NSData转换为NSString,请使用:

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

要将NSString转换为NSData,请使用:

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