ios – 如何转换/使用CC_SHA1方法,以便它可以在64位系统中使用

我正在转换我的应用程序在64位系统上工作,我一直试图正确使用内置的CC_SHA1方法.

我收到警告:

Implicit conversion loses integer precision: ‘NSUInteger’ (aka ‘unsigned long’) to ‘CC_LONG’ (aka ‘unsigned int’)

尝试在CC_SHA1方法中传递:data.length.

data.length是NSUInteger

CC_SHA1方法定义是:

extern unsigned char *CC_SHA1(const void *data,CC_LONG len,unsigned char *md)

其中CC_LONG是32位无符号整数.

如何更改它以使用CC_LONG64?

typedef uint64_t CC_LONG64;

这是我得到上述警告的转换方法

+(Nsstring*)sha1:(Nsstring*)input
{
    const char *cstr = [input cStringUsingEncoding:NSUTF8StringEncoding];
    NSData *data = [NSData dataWithBytes:cstr length:input.length];

    uint8_t digest[CC_SHA1_DIGEST_LENGTH];

    CC_SHA1(data.bytes,data.length,digest);

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

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

    return output;

}

解决方法

假设数据长度小于2 ^ 32,则可以添加
明确的演员而不会丢失任何信息.
这应该删除警告:
CC_SHA1(data.bytes,(CC_LONG)data.length,digest);

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...