2011-05-12 33 views
3

我有一个unsigned char数组,我想将其转换为十六进制的NSString,目前我做以下列方式:无符号字符数组,以十六进制表示的NSString

unsigned char result[16]; 
// Fill the array 

NSString *myHexString = [NSString stringWithFormat: @"%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X", 
    result[0], result[1], result[2], result[3], 
    result[4], result[5], result[6], result[7], 
    result[8], result[9], result[10], result[11], 
    result[12], result[13], result[14], result[15] 
]]; 

是否有一个 更好的办法内置的功能,实现这一点?

回答

9

这个怎么样?

NSMutableString *hex = [NSMutableString string]; 
for (int i=0; i<16; i++) 
    [hex appendFormat:@"%02x", result[i]]; 

// And if you insist on having the hex in an immutable string: 
NSString *immutableHex = [NSString stringWithString:hex]; 

你也可以把代码放到一个类别,以保持美好的东西:

@implementation NSString (Hex) 

+ (NSString*) hexStringWithData: (unsigned char*) data ofLength: (NSUInteger) len 
{ 
    NSMutableString *tmp = [NSMutableString string]; 
    for (NSUInteger i=0; i<len; i++) 
     [tmp appendFormat:@"%02x", data[i]]; 
    return [NSString stringWithString:tmp]; 
} 

@end 

然后你的代码归结为:

unsigned char result[16] = {…}; 
NSString *hexString = [NSString hexStringWithData:result ofLength:16]; 

我认为这是我们所不错的,因为它得到。

+0

谢谢,但这不是我的意思,特别是因为我需要将它转换为NSString后。我想知道是否有内置函数。 – MByD 2011-05-12 12:07:59

+0

'NSMutableString'从'NSString'下降,这样就可以在需要'NSString'的地方使用它。如果你真的想,你可以很容易地创建一个不可变的字符串,我已经编辑了答案来添加一个例子。我不认为有一个内置的功能来做到这一点。 – zoul 2011-05-12 12:11:28

+0

感谢您的更新,我只是想知道是否有一个内置的功能。看起来像答案是否定的,但你确实已经足够好:) – MByD 2011-05-12 12:18:38

相关问题