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を解析して取得している場合、NSStringではなくNSNumberである可能性が最も高いです. これまでに試したすべての JSON パーサーは、数値を NSNumber に変換します。プロパティを NSNumber に変更してから、次のように簡単にテストできると思います。

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