如何从十六进制字符串获取 NSData? [英] How to get NSData From Hex String?

查看:55
本文介绍了如何从十六进制字符串获取 NSData?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要通过 melodyManager 发送数据 &不含非十六进制字符,

I need to send data over melodyManager & free from NonHexCharacters,

我已经通过链接如何转换NSData 转换成 NSString Hex 字符串?

来自十六进制字符串的 NSData?

在两个链接中,我都无法获得 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆