十六进制字符串到NSString

时间:2015-02-06 08:54:18

标签: objective-c algorithm nsstring hex

我有来自服务器的十六进制字符串,我必须将该十六进制字符串转换为NSString。我使用了这篇文章How to convert an NSString to hex values

中的一些方法

我几乎得到了相同的文字,除了Ú在某个地方随机出现。 我将Ú更改为粗体文本,以便在以下示例中找到。 你们可以帮我解决算法有什么问题。

我的算法

- (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

来自服务器的正常字符串,即RSA编码字符串

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

使用我的上述算法转换的正常字符串

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

1 个答案:

答案 0 :(得分:0)

服务器似乎将DA转换为空格,可能是因为DA位于ASCII范围之外,因为它仅使用7位而只能运行7A

算法会将DA转换为Ú,这在使用Latin-1编码时似乎没问题。使用列表here中的其他编码(例如NSUTF8StringEncoding)可能有所帮助。