Cyp*_*ian 9 iphone 64-bit objective-c ios
我正在转换我的应用程序在64位系统上工作,我一直试图正确使用内置CC_SHA1方法.
我收到警告:
隐式转换失去整数精度:"NSUInteger"(又名"无符号长")为"CC_LONG"(又名"无符号整型")
当试图传递:data.length在CC_SHA1方法中.
data.length 是 NSUInteger
CC_SHA1 方法定义是:
extern unsigned char *CC_SHA1(const void *data, CC_LONG len, unsigned char *md)
Run Code Online (Sandbox Code Playgroud)
哪里CC_LONG是32位unsigned integer.
如何更改才能使用 CC_LONG64?
typedef uint64_t CC_LONG64;
Run Code Online (Sandbox Code Playgroud)
这是我得到上述警告的转换方法:
+(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;
}
Run Code Online (Sandbox Code Playgroud)
Mar*_*n R 14
假设数据长度小于2^32,则可以添加显式强制转换而不会丢失任何信息.这应该删除警告:
CC_SHA1(data.bytes, (CC_LONG)data.length, digest);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3152 次 |
| 最近记录: |