Hex到人类可读的NSString

时间:2014-09-07 22:46:45

标签: objective-c macos cocoa hex

我的输出如下:

63006f00 6c006f00 72000000

这个输出意味着“颜色”,但如何在可可中获得呢?

我在Stackoverflow上找到了这个方法:

- (NSString *)hexToString:(NSString *)string {
NSMutableString * newString = [[NSMutableString alloc] init];
NSScanner *scanner = [[NSScanner alloc] initWithString:string];
unsigned value;
while([scanner scanHexInt:&value]) {
    [newString appendFormat:@"%c",(char)(value & 0xFF)];
}
string = [newString copy];
return string;

}

并且它有效...但我的字符串必须如下所示:

@"63 00 6f 00 6c 00 6f 00 72 00 00 00"

如上所述格式化字符串的任何帮助吗?

1 个答案:

答案 0 :(得分:0)

您可以更改代码以使用原始输入,如下所示:

NSString *string = @"0x63006f00 0x6c006f00 0x72000000";
NSMutableString * newString = [[NSMutableString alloc] init];
NSScanner *scanner = [[NSScanner alloc] initWithString:string];
unsigned value;
while([scanner scanHexInt:&value]) {
    uint16_t a = (value >> 24) & 0xff;
    uint16_t b = (value >> 8) & 0xff;
    if (a) [newString appendFormat:@"%c", a];
    if (b) [newString appendFormat:@"%c", b];
}
NSLog(@"%@", newString);

我们的想法是一次处理两个字符,并在使用0xff屏蔽它们之前将相应的项目移动到位。

然而,这看起来非常类似于阅读用UTF-16编码的东西的解决方法。