2017-02-13 64 views
-1

我需要通過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

回答

1

對於清潔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」 –