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

How to get NSData From Hex String?

我需要通过 melodyManager 发送数据并且没有 NonHexCharacters,

我已经完成了 link How to convert an NSData into an NSString Hex string?

在两个 link 中我都无法获取 NonHexFree 字符数据。

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

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 前缀的 space & 输出字符串应该是 0009B0FDC2A10601040404111

然后它应该被转换为 `NSData'

要清除非十六进制字符,请检查此,

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 = @"0123456789abcdefABCDEF";
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];