use*_*567 0 cocoa-touch md5 objective-c nsdecimalnumber ios
我使用此代码获取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;
}
Run Code Online (Sandbox Code Playgroud)
当我这样做时,它完美无缺
[self md5:@"mystring"];
Run Code Online (Sandbox Code Playgroud)
但是当我这样做的时候
[self md5:userId];
Run Code Online (Sandbox Code Playgroud)
我有一个错误
因未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:' - [NSDecimalNumber UTF8String]:无法识别的选择器发送到实例0x61a7080'
userId是一个NSString
NSString *userId; @property(retain,nonatomic) NSString *userId;
Run Code Online (Sandbox Code Playgroud)
但它会影响facebook的用户ID,就像我尝试过的"3309843"
[self md5:[userId stringValue]]];
Run Code Online (Sandbox Code Playgroud)
我仍然有同样的错误
更新 我试过这个
[self md5:@"980232376"];
Run Code Online (Sandbox Code Playgroud)
仍然有相同的错误,我认为问题是方法md5.我不能得到一串数字的md5?
听起来它实际上不是你在那里的字符串,如果你正在解析json以获得它,它很可能是NSNumber而不是NSString.到目前为止,我尝试过的所有JSON解析器都将数字转换为NSNumber.我认为快速测试可能只是将属性更改为NSNumber然后:
[self md5:[NSString stringWithFormat:@"%@", userId]];
Run Code Online (Sandbox Code Playgroud)