【问题标题】:Unsigned Char Array to Hex Representation NSString无符号字符数组到十六进制表示 NSString
【发布时间】:2011-08-24 01:47:03
【问题描述】:

我有一个 unsigned char 数组,我想将其转换为十六进制 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]
]];

有没有更好的方法实现这一点的内置函数?

【问题讨论】:

    标签: objective-c nsstring hex arrays


    【解决方案1】:

    这个怎么样?

    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。我想知道是否有内置函数。
    • NSMutableString 继承自 NSString,因此您可以在需要 NSString 的任何地方使用它。如果你真的想要,你可以轻松地从可变字符串创建一个不可变字符串,我已经编辑了答案以添加一个示例。我认为没有内置函数可以做到这一点。
    • 感谢更新,我只是想知道是否有内置功能。似乎答案是否定的,但你确实做得很好:)
    • NSString 没有方法 hexStringWithData。你必须使用 NSData initWithBytes
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-06
    • 1970-01-01
    • 1970-01-01
    • 2023-04-11
    • 2015-12-14
    • 2013-04-15
    • 2018-05-17
    相关资源
    最近更新 更多