たまたんのぶろぐ

たまたんが時たま言いたいことを書いてます。ジャンルはめっちゃええ加減ですwソフトやプログラムのことが多いかもしれませんが。。。。。

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

 

必要だったからメモした。((φ┫ ̄Д ̄ ┣ ホォホォ