如何从十六进制字符串获取NSData?
我需要通过melodyManager
&无NonHexCharacters发送数据,如何从十六进制字符串获取NSData?
我已经走了throught链接How to convert an NSData into an NSString 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'
对于清洁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];
它完全为我工作,嘿@Mukesh你能告诉我吗?为什么你再次扫弦? – Bapu
只需转到'scanHexInt:'方法的定义,其可选地带有前缀“0x”或“0X” –
这个问题有点过于抽象。什么是melodyManager,什么是NonHexFree?你做了什么?请向我们展示代码并描述你卡在哪里。 –
那么你期望的结果是什么?它是“000090B00FD0C20A100600104040400101001” –
http://stackoverflow.com/a/7318062/1091539 – Mutawe