如何从十六进制字符串获取 NSData? [英] How to get NSData From Hex String?
问题描述
我需要通过 melodyManager
发送数据 &不含非十六进制字符,
I need to send data over melodyManager
& free from NonHexCharacters,
我已经通过链接如何转换NSData 转换成 NSString Hex 字符串?
在两个链接中,我都无法获得 NonHexFree 字符数据.
In Both links i am not able to get NonHexFree charater data.
我的输入字符串是这样的,
My input string is this,
0x0009 0xB0 0xFD 0xC2 0xA1 0x06 0x01%@040404 0x01 0xss1 0xhh 0xyy1
我需要将此字符串转换为不含非十六进制字符的 NSData 我的意思是数据应该只包含十六进制字符串,例如 0-9 个符号 &A, B, C, D, E, F(或者 a, b, c, d, e, f)并删除带有 0x 前缀的空格 &输出字符串应为 0009B0FDC2A10601040404111
I need to convert this string into NSData which is free from nonhex characters i mean data should get only of hex string like from 0-9 symbols & A, B, C, D, E, F (alternatively a, b, c, d, e, f) and also remove space with 0x prefixes & output string should be 0009B0FDC2A10601040404111
然后它应该被转换为`NSData'
then it should get converted to `NSData'
推荐答案
对于清理非十六进制字符,请检查这个,
For cleaning nonHex characters check this,
NSString *input = @"0x0009 0xB0 0xFD 0xC2 0xA1 0x06 0x01%@040404 0x01 0xss1 0xhh 0xyy1";
我认为您的案例中不需要0x".
I am considering that you don't required '0x' into your case.
NSString * output = [input stringByReplacingOccurrencesOfString:@"0x" withString:@""
options:NSCaseInsensitiveSearch range:NSMakeRange(0, input.length)];
NSString * hexChars = @"0123456789abcdefABCDEF";
NSCharacterSet *hexc = [NSCharacterSet characterSetWithCharactersInString:hexChars];
NSCharacterSet *invalidHexc = [hexc invertedSet];
NSString * allHex = [[output componentsSeparatedByCharactersInSet:invalidHexc] componentsJoinedByString:@""];
然后将生成的 hexstring 传递给扫描 hexString &追加到NSMUtableData
然后转换成NSData,
Then resultant hexstring pass to scan hexString & append into NSMUtableData
then convert it into 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];
这篇关于如何从十六进制字符串获取 NSData?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!