NSDataのバイトコードをNSStringに変換する

NSString *str = @"hogehoge";
NSMutableString *result = [NSMutableString string];
NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
NSLog(@"data: %@", data); // data: <686f6765 686f6765>

const unsigned char *bytes = [data bytes];
for (int i=0; i<[data length]; i++) {
    [result appendFormat:@"%X", bytes[i]];
}
NSLog(@"result: %@", result); // result: 686F6765686F6765

デバイストークンの取得をするときに@"<"@">"@" "を置換するのよりもイケてる方法があるんじゃないかと思いながら実装していたので変換方法を探してみた。
for文の中で[data getBytes:range:]しようかと思ったけどbyteの取得を1度にした方が効率いいやなあということでこうなりました。

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
    NSMutableString *tokenString = [NSMutableString string];
    const unsigned char *bytes = [deviceToken bytes];
    for (int i=0; i<[deviceToken length]; i++) {
        [tokenString appendFormat:@"%X", bytes[i]];
    }
}