これは私が書いた NSData に適用されるカテゴリです。NSData を表す 16 進数の NSString を返します。データの長さは任意です。NSData が空の場合、空の文字列を返します。
NSData+Conversion.h
#import <Foundation/Foundation.h>
@interface NSData (NSData_Conversion)
#pragma mark - String Conversion
- (NSString *)hexadecimalString;
@end
NSData+Conversion.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]
これは、呼び出してからスペース、<、および > を削除するよりも「おそらく」優れています。キャラクターを剥ぎ取るのはあまりにも「ハッキー」に感じます。さらに、Apple が将来 NSData のフォーマットを変更するかどうかはわかりません-description
。
注:この回答のコードのライセンスについて、人々から連絡がありました。私はここに、この回答で投稿したコードの著作権をパブリック ドメインに捧げます。