Ich konvertiere meine App auf 64-Bit-System zu arbeiten, und ich steckte auf versucht, eine eingebaute CC_SHA1
Methode ordnungsgemäß zu verwenden.So konvertieren/verwenden Sie CC_SHA1-Methode, so dass es in einem 64-Bit-System verwendet werden kann
ich die Warnung:
Implizite Konvertierung verliert integer Präzision: 'NSUInteger' (auch bekannt als 'unsigned long') zu 'CC_LONG' (auch bekannt als 'unsigned int')
Beim Versuch, zu bestehen: data.length
in CC_SHA1
Methode.
data.length
ist NSUInteger
CC_SHA1
Methodendefinition ist:
extern unsigned char *CC_SHA1(const void *data, CC_LONG len, unsigned char *md)
wo CC_LONG
ein 32 Bit ist unsigned integer
.
Wie kann ich es ändern, stattdessen CC_LONG64
zu verwenden?
typedef uint64_t CC_LONG64;
Dies ist die Umwandlungsmethode, wo ich die obige Warnung erhalten:
+(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;
}
möglich Duplikat [Objective-C Implizite Konvertierung verliert integer Präzision (Größe \ 't zu CC \ _LONG)] (http://stackoverflow.com/questions/17013838/objective- c-implizite-Konvertierung-verliert-Integer-Genauigkeit-Größe-t-zu-cc-lang) – jbouaziz