2015-02-06 168 views
0

我有一個來自服務器的十六進制字符串,我必須將該十六進制字符串轉換爲NSString。我使用了這篇文章中的一些方法How to convert an NSString to hex values十六進制字符串到NSString

我幾乎得到了相同的文本,只是在某些地方隨機出現。 我已將Ú更改爲粗體文本,以便在以下示例中查找。 你們能幫我解決算法的問題嗎?

我的算法

- (NSString *) stringFromHex:(NSString *)str 
{ 
    NSMutableData *stringData = [[NSMutableData alloc] init]; 
    unsigned char whole_byte; 
    char byte_chars[3] = {'\0','\0','\0'}; 
    int i; 
    for (i=0; i < [str length]/2; i++) { 
     byte_chars[0] = [str characterAtIndex:i*2]; 
     byte_chars[1] = [str characterAtIndex:i*2+1]; 
     whole_byte = strtol(byte_chars, NULL, 16); 
     [stringData appendBytes:&whole_byte length:1]; 
    } 
    return [[NSString alloc] initWithData:stringData encoding:NSASCIIStringEncoding]; 
} 

六角從服務器

7539686132564968635943666c6348532f564a656261736b526a47585a75734a625a61316c5753475a645575625a5253386f473574347678694c4930695648704c52473170547a4f6b356552da554675394e58672b6943743857524637557748755961634435306936437a7a535a726d6e53664e6e523862433232594a4f593638655464314c6747324763544f56357a736f544c49734e734ada672f77472f6b6b4b48446c644659426d51334d3dda

012串 從服務器

普通字符串這是RSA編碼的字符串

使用我的上述算法

u9ha2VIhcYCflcHS

u9ha2VIhcYCflcHS/VJebaskRjGXZusJbZa1lWSGZdUubZRS8oG5t4vxiLI0iVHpLRG1pTzOk5eR UFu9NXg + iCt8WRF7UwHuYacD50i6CzzSZrmnSfNnR8bC22YJOY68eTd1LgG2GcTOV5zsoTLIsNsJ 克/ WG/kkKHDldFYBmQ3M =

普通字符串轉換/ VJebaskRjGXZusJbZa1lWSGZdUubZRS8oG5t4vxiLI0iVHpLRG1pTzOk5eR Ú UFu9NXg + iCt8WRF7UwHuYacD50i6CzzSZrmnSfNnR8bC22YJOY68eTd1LgG2GcTOV5zsoTLIsNsJ Ú克/ WG/kkKHDldFYBmQ3M = Ú

回答

0

服務器似乎DA轉換爲一個空間,可能是因爲DA位於ASCII範圍,只跑到7A外,由於它僅使用7位。

該算法將DA轉換爲Ú,這在使用Latin-1編碼時似乎很好。使用列表here中的不同編碼(例如NSUTF8StringEncoding)可能會有所幫助。

+0

使用NSUTF8StringEncoding或其他函數返回空字符串或與NSASCIIStringEncoding相同的結果。 所以現在我必須使用 stringByReplacingOccurrencesOfString:@「Ú」withString:@「」 – 2015-02-06 09:58:27