我的用户被提示输入RAW NSData(例如:< 0201581d 9fc84f7b bf136a80 e7fc9572>)
此原始数据是AES加密的NSString。
然而,问题在于转换那些实际的数据字节< 0201581d 9fc84f7b bf136a80 e7fc9572>进入NSData类型本身。
总之;我如何做到这一点:< 0201581d 9fc84f7b bf136a80 e7fc9572>进入NSData的数据? 使整数保持数据HALF有效(因为类型太短)所以它需要是一个NSString。
答案 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];