2012-01-22 90 views
1

我的用戶被提示在RAW NSData的(如:< 0201581d 9fc84f7b bf136a80 e7fc9572>)進入的NSData到的NSString和反之亦然

該原始數據是AES加密的NSString。

但是,問題是將數據的這些實際字節轉換爲NSData類型本身。

  1. 提示輸入數據
  2. 將數據輸入 - > @ 「< 0201581d 9fc84f7b bf136a80 e7fc9572>」
  3. 需要使輸入的數據到一個NSData類型,而不是被傳遞NSString的。

總之;我該如何做到這一點:< 0201581d 9fc84f7b bf136a80 e7fc9572>進入NSData的數據? 使整數保持數據HALF的作品(因爲類型太短)所以它需要是一個NSString。

回答

2

這與NSString (hex) to bytes非常相似。如果你刪除了多餘的標點符號,那麼答案將適用於你。

+0

我用這個和iccir的解決方案的組合。我需要十六進制字符串來使用這個解決方案!謝謝! – evdude100

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的描述]獲得與括號和空格的版本。

+0

這不是我要找的不幸。 NSData被加密,所以它不是一個真正的NSString。我只需要將它存儲到一個類型。 – evdude100

+0

我使用了你的轉換,但是沒有將字符串轉換成實際的NSData就沒用了。 Upvoted;但羅布得到承認 – evdude100

0

要的NSData轉換爲NSString的使用:

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

要的NSString轉換爲NSData的使用:

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