Frage

mit dem iPhone SDK, ich bin mit den Benutzern wählen Sie die Bilder aus der Bildauswahl. Wenn der Benutzer ein Bild auswählt, sie vor ausgewählt hat, würde Ich mag den Benutzer bewusst machen.

Mein erster Plan (nur sicherstellen, dass andere Dinge für jetzt arbeiten) ist das Bild in eine Datei zu speichern (muß dies aus anderen Gründen ohnehin tun), eine Prüfsumme des NSData als Dateinamen verwenden. Dann, wenn sie das gleiche Bild später wählen, wird die Prüfsumme gleich und so kann ich sehen, dass eine Datei mit diesem Namen existiert bereits - Hurra

Allerdings habe ich das Internet und den Apple-docs abgekocht, wie eine Prüfsumme von einem NSData zu berechnen. Ich weiß, ich könnte meine eigene Implementierung implementieren, aber ich würde es vorziehen, das zu vermeiden, wenn möglich. Ich bin auch glücklich für andere Ideen, wie zu überprüfen, ob zwei UIImages gleich sind.

Bearbeiten

Vor zwei Jahren habe ich versprochen, ein Codebeispiel, und hier ist es. Wirklich leid für die Verzögerung! :)

+(NSString*)imageIdForData:(NSData*)data
{
        char* result = (char*) [[data MD5Sum] bytes];

        NSString* hash =  [NSString stringWithFormat: @"%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X",
                                           result[0], result[1],
                                           result[2], result[3],
                                           result[4], result[5],
                                           result[6], result[7],
                                           result[8], result[9],
                                           result[10], result[11],
                                           result[12], result[13],
                                           result[14], result[15]];

        return hash;
}
War es hilfreich?

Lösung

In der <CommonCrypto/CommonDigest.h> Header-Datei sollte eine CC_MD5 Funktion sein, die einen MD5-Hash von beliebigen Daten berechnen. Es ist eine C-Funktion, so dass es nicht direkt auf einem NSData arbeiten, aber es sollte das tun, was Sie brauchen.

Einige weitere info hier (einschließlich einer Wrapper NSString mit - sollte wird leicht genug, um zu konvertieren NSData)

zu verwenden,

Andere Tipps

Weil alles ist besser mit Kategorien ...

Rubrik:

@interface NSData (MD5)
- (NSString *)md5String;
@end

Umsetzung:

#import <CommonCrypto/CommonDigest.h>


- (NSString *)md5String
{
    void *cData = malloc([self length]);
    unsigned char resultCString[16];
    [self getBytes:cData length:[self length]];

    CC_MD5(cData, (unsigned int)[self length], resultCString);
    free(cData);

    NSString *result = [NSString stringWithFormat:
                        @"%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X",
                        resultCString[0], resultCString[1], resultCString[2], resultCString[3],
                        resultCString[4], resultCString[5], resultCString[6], resultCString[7],
                        resultCString[8], resultCString[9], resultCString[10], resultCString[11],
                        resultCString[12], resultCString[13], resultCString[14], resultCString[15]
                        ];
    return result;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top