0

我使用此代码获取 md5 字符串哈希

- (NSString *) md5:(NSString *) input
{
    const char *cStr = [input UTF8String];
    unsigned char digest[16];
    CC_MD5( cStr, strlen(cStr), digest ); // This is the md5 call

    NSMutableString *output = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];

    for(int i = 0; i < CC_MD5_DIGEST_LENGTH; i++)
        [output appendFormat:@"%02x", digest[i]];

    return  output;
}

当我这样做时,它工作得很好

[self md5:@"mystring"];

但是当我做这个时

[self md5:userId];

我有一个错误

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[NSDecimalNumber UTF8String]:无法识别的选择器已发送到实例 0x61a7080”

userId 是一个 NSString

NSString *userId; @property(retain,nonatomic) NSString *userId;

但它包含 facebook 用户 id,比如我试过的“3309843”

[self md5:[userId stringValue]]];

我仍然有同样的错误

更新 我试过这个

[self md5:@"980232376"];

并且仍然有同样的错误,我认为问题是方法 md5。我不能得到一串数字的 md5 吗?

4

1 回答 1

7

听起来它实际上不是你在那里的字符串,如果你正在解析 json 来获取它,它很可能是一个 NSNumber 而不是一个 NSString。到目前为止,我尝试过的所有 JSON 解析器都将数字转换为 NSNumber。我认为一个快速测试可能只是将属性更改为 NSNumber ,然后:

[self md5:[NSString stringWithFormat:@"%@", userId]];
于 2011-12-14T13:22:28.200 回答