NSDataを16進数の文字列に出力する関数
久しぶりに投稿。
NSDataを16進数の文字列に出力する関数。(ARC用)
- (NSString*) serializeDeviceToken:(NSData*) deviceToken
{
NSMutableString *str = [NSMutableStringstringWithCapacity:64];
int length = [deviceToken length];
char *bytes = malloc(sizeof(char) * length);
[deviceToken getBytes:bytes length:length];
for (int i = 0; i < length; i++)
{
[str appendFormat:@"%02.2hhX", bytes[i]];
}
free(bytes);
return str;
}
または、NSDataのカテゴリーに追加
<NSData+Hex.h>
@interface NSData (Hex)
- (NSString*)hexString ;
@end
<NSData+Hex.m>
#import "NSData+Hex.h"
@implementation NSData (Hex)
- (NSString*)hexString {
unichar* hexChars = (unichar*)malloc(sizeof(unichar) * (self.length*2));
unsignedchar* bytes = (unsignedchar*)self.bytes;
for (NSUInteger i = 0; i < self.length; i++) {
unichar c = bytes[i] / 16;
if (c < 10) c += '0';
else c += 'a' - 10;
hexChars[i*2] = c;
c = bytes[i] % 16;
if (c < 10) c += '0';
else c += 'a' - 10;
hexChars[i*2+1] = c;
}
NSString* retVal = [[NSString alloc] initWithCharactersNoCopy:hexChars
length:self.length*2
freeWhenDone:YES];
return retVal ;
}
@end
必要だったからメモした。((φ┫ ̄Д ̄ ┣ ホォホォ