سؤال

باستخدام iPhone SDK، أطلب من المستخدم تحديد الصور من منتقي الصور.إذا قام المستخدم بتحديد الصورة التي اختارها من قبل، أود أن أجعل المستخدم على علم بها.

خطتي الأولية (فقط للتأكد من أن الأشياء الأخرى تعمل في الوقت الحالي) هي حفظ الصورة في ملف (يجب القيام بذلك على أي حال لأسباب أخرى)، باستخدام المجموع الاختباري لـ NSData كاسم للملف.بعد ذلك، عندما يقومون بتحديد نفس الصورة لاحقًا، سيكون المجموع الاختباري هو نفسه ولذا يمكنني أن أرى أن الملف بهذا الاسم موجود بالفعل - مرحا!

ومع ذلك، فقد بحثت في الإنترنت ومستندات Apple عن كيفية حساب المجموع الاختباري من NSData.أعلم أنه يمكنني تنفيذ التنفيذ الخاص بي، لكنني أفضل تجنب ذلك، إن أمكن.أنا سعيد أيضًا بالأفكار الأخرى حول كيفية التحقق من أن صورتي UIImages متماثلتان.

يحرر

قبل عامين، وعدت بعينة من التعليمات البرمجية، وها هي.آسف حقا للتأخير!:)

+(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;
}
هل كانت مفيدة؟

المحلول

في ال <CommonCrypto/CommonDigest.h> يجب أن يحتوي ملف الرأس على وظيفة CC_MD5 التي ستقوم بحساب تجزئة MD5 للبيانات العشوائية.إنها وظيفة لغة C، لذا فهي لن تعمل مباشرة على NSData، ولكنها يجب أن تفعل ما تحتاجه.

اكثر معلومات هنا (بما في ذلك المجمع الذي يستخدم NSString - يجب أن يكون من السهل تحويله لاستخدام NSData)

نصائح أخرى

لأن كل شيء أفضل مع الفئات ...

رأس:

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

تطبيق:

#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;
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top