Це категорія, застосована до NSData, про яку я писав. Він повертає шістнадцятковий NSString, що представляє NSData, де дані можуть бути будь-якої довжини. Повертає порожній рядок, якщо NSData порожній.
NSData + Conversion.h
#import <Foundation/Foundation.h>
@interface NSData (NSData_Conversion)
#pragma mark - String Conversion
- (NSString *)hexadecimalString;
@end
NSData + конверсія.m
#import "NSData+Conversion.h"
@implementation NSData (NSData_Conversion)
#pragma mark - String Conversion
- (NSString *)hexadecimalString {
/* Returns hexadecimal string of NSData. Empty string if data is empty. */
const unsigned char *dataBuffer = (const unsigned char *)[self bytes];
if (!dataBuffer)
return [NSString string];
NSUInteger dataLength = [self length];
NSMutableString *hexString = [NSMutableString stringWithCapacity:(dataLength * 2)];
for (int i = 0; i < dataLength; ++i)
[hexString appendString:[NSString stringWithFormat:@"%02lx", (unsigned long)dataBuffer[i]]];
return [NSString stringWithString:hexString];
}
@end
Використання:
NSData *someData = ...;
NSString *someDataHexadecimalString = [someData hexadecimalString];
Це "напевно" краще, ніж дзвонити, [someData description]
а потім знімати пробіли, <'і>. Зачистки персонажів просто почуваються надто "хакітними". Крім того, ви ніколи не знаєте, чи -description
в майбутньому Apple змінить форматування NSData .
ПРИМІТКА. У цій відповіді люди до мене зверталися з приводу ліцензування коду. Я присвячую свої авторські права в коді, який я опублікував у цій відповіді, у загальнодоступне надбання.