如何从十六进制字符串获取NSData?

问题描述:

我需要通过melodyManager &无NonHexCharacters发送数据,如何从十六进制字符串获取NSData?

我已经走了throught链接How to convert an NSData into an NSString Hex string?

NSData from hex String?

在这两个环节我不能够得到NonHexFree系统字符数据。

我的输入字符串是这样的,

0x0009 0xB0 0xFD 0xC2 0xA1 0x06 0x01%@040404 0x01 0xss1 0xhh 0xyy1

我需要把这个字符串转换为NSData的是无nonhex字符我的意思是数据应该得到的只有十六进制字符串像0-9符号&一个转换,B,C,D,E,F(也可以是a,b,c,d,e,f),同时也删除带0x前缀的空格&输出字符串应该是0009B0FDC2A10601040404111

那么它应该被转换为`NSData'

+0

这个问题有点过于抽象。什么是melodyManager,什么是NonHexFree?你做了什么?请向我们展示代码并描述你卡在哪里。 –

+1

那么你期望的结果是什么?它是“000090B00FD0C20A100600104040400101001” –

+0

http://stackoverflow.com/a/7318062/1091539 – Mutawe

对于清洁nonHex字符进行检查,

NSString *input = @"0x0009 0xB0 0xFD 0xC2 0xA1 0x06 0x01%@040404 0x01 0xss1 0xhh 0xyy1"; 

我正在考虑,你不要求加“0x”到你的情况。

NSString * output = [input stringByReplacingOccurrencesOfString:@"0x" withString:@"" 
                 options:NSCaseInsensitiveSearch range:NSMakeRange(0, input.length)]; 
NSString * hexChars = @"abcdefABCDEF"; 
NSCharacterSet *hexc = [NSCharacterSet characterSetWithCharactersInString:hexChars]; 
NSCharacterSet *invalidHexc = [hexc invertedSet]; 
NSString * allHex = [[output componentsSeparatedByCharactersInSet:invalidHexc] componentsJoinedByString:@""]; 

然后得到的hexstring通过扫描的hexstring &追加到NSMUtableData然后将其转换为NSData的,

//Check condition if required `allHex.lenght != nil` 

NSMutableData *result = [[NSMutableData alloc] init]; 
int i = 0; 
for (i = 0; i+2 <= allHex.length; i+=2) { 
    NSRange range = NSMakeRange(i, 2); 
    NSString* hexStr = [allHex substringWithRange:range]; 
    NSScanner* scanner = [NSScanner scannerWithString:hexStr]; 
    unsigned int intValue; 
    [scanner scanHexInt:&intValue]; 
    unsigned char uc = (unsigned char) intValue; 
    [result appendBytes:&uc length:1]; 
} 
NSData * data = [NSData dataWithData:result]; 
+0

它完全为我工作,嘿@Mukesh你能告诉我吗?为什么你再次扫弦? – Bapu

+0

只需转到'scanHexInt:'方法的定义,其可选地带有前缀“0x”或“0X” –