我需要将十六进制值的NSString转换为文本的NSString(ASCII)。 例如,我需要类似的东西:
"68 65 78 61 64 65 63 69 6d 61 6c" to be "hexadecimal"
我已经查看并调整了this thread中的代码,但它对我不起作用。它仅适用于一对十六进制。与空间有关?任何提示或示例代码都非常感谢。
答案 0 :(得分:8)
我会为你的目的修改同样的东西。
NSString * str = @"68 65 78 61 64 65 63 69 6d 61 6c";
NSMutableString * newString = [NSMutableString string];
NSArray * components = [str componentsSeparatedByString:@" "];
for ( NSString * component in components ) {
int value = 0;
sscanf([component cStringUsingEncoding:NSASCIIStringEncoding], "%x", &value);
[newString appendFormat:@"%c", (char)value];
}
NSLog(@"%@", newString);
答案 1 :(得分:6)
您可以使用NSScanner来获取每个角色。需要空格来分隔每个值,否则扫描仪将继续扫描并忽略其他数据。
- (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];
[newString release];
return [string autorelease];
}
// called like:
NSLog(@"%@",[self hexToString:@"68 65 78 61 64 65 63 69 6d 61 6c"]);
答案 2 :(得分:0)
在我的情况下,源字符串没有分隔符,例如'303034393934'这是我的解决方案。
SQL> SELECT val, vsize(val), dump(val) FROM t ORDER BY val DESC;
VAL VSIZE(VAL) DUMP(VAL)
---------------- ---------------- --------------------------------------
123456789012345 9 Typ=2 Len=9: 200,2,24,46,68,90,2,24,46
12345 4 Typ=2 Len=4: 195,2,24,46
1234 3 Typ=2 Len=3: 194,13,35
12 2 Typ=2 Len=2: 193,13
1 2 Typ=2 Len=2: 193,2
-12 3 Typ=2 Len=3: 62,89,102
6 rows selected.