无符号字符数组转换为十六进制表示的NSString

3

我有一个无符号字符数组,想将其转换为十六进制的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]
]];

有没有一个内置函数可以实现这个功能,比如说更好的方法?

1个回答

10

这个怎么样?

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];

我认为这已经是最好的了。


谢谢,但那不是我想要的,特别是因为我之后需要将其转换为NSString。我想知道是否有内置函数。 - MByD
NSMutableStringNSString 的子类,因此您可以在任何需要 NSString 的地方使用它。如果您真的想要,您可以轻松地从可变字符串创建一个不可变字符串,我已经编辑了答案并添加了一个示例。我认为没有内置函数可以做到这一点。 - zoul
谢谢你的更新,我只是想知道是否有内置函数可以实现这个。看起来答案是否定的,但你做得很好 :) - MByD
NSString没有hexStringWithData方法。你需要使用NSData initWithBytes。 - kraag22

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接