2016-06-02 3 views
1

Ich erhalte NSMutableArray als Antwort von benutzerdefinierten Smart RouterWie Konvertieren von NSMutableArray von Hex zu NSString, nachdem er einige Byte Entfernen

(<01>, 
    <ca>, 
    <04>, 
    <3a>, 
    <7b>, 
    <22>, 
    <70>, 
    <61>, 
    <73>, 
    <73>, 
    <22>, 
    <3a>, 
    <22>, 
    <6b>, 
    <61>, 
    <6e>, 
    <6f>, 
    <6b>, 
    <22>, 
    <2c>, 
    <22>, 
    <73>, 
    <73>, 
    <69>, 
    <64>, 
    <22>, 
    <3a>, 
    <22>, 
    <6f>, 
    <70>, 
    <65>, 
    <6e>, 
    <57>, 
    <72>, 
    <74>, 
    <41>, 
    <70>, 
    <6c>, 
    <31>, 
    <32>, 
    <38>, 
    <22>, 
    <2c>, 
    <22>, 
    <75>, 
    <73>, 
    <65>, 
    <72>, 
    <22>, 
    <3a>, 
    <22>, 
    <6b>, 
    <61>, 
    <6e>, 
    <6f>, 
    <6b>, 
    <22>, 
    <7d> 
) 

Ich brauche die ersten 4 Daten zu vermeiden, dann wandeln sie in NSString von (ASCII) wie unten

{"mac":"kanok","pass":"kanok","passphrase":"root1234","ssid":"aplsh90","user":"kanok"} 

kann ich es konvertieren mit this website

Ich weiß, ich muss verwenden Convert hex to nsstring oder Convert Hex to NSSting und stringByReplacingOccurrencesOfString

Wie kann ich konvertieren?

+0

PLZ siehe diesen Link http://stackoverflow.com/questions/6421282/how-to-convert-hex-to-nsstring-in-objective-c –

+0

Dies ist fast die gleiche Frage von: http: // stackoverflow .com/questions/37568631/convert-nsstring-of-hex-zu-nsstring-of-text Das eigentliche Problem ist hier nur die unerwünschten Werte aus einem 'NSMutableArray' zu entfernen und' componentsJoinedByString: 'zu verwenden. – Larme

Antwort

1

Dieser folgende Code funktioniert für mich .

-(void)processSmartRouterAssociationResponseWithArray:(NSMutableArray*)responseHexDataArray 
{ 
    @try 
    { 
     //NSLog(@"responseHexDataArray : %@",responseHexDataArray); 
     /* Ignore first 4 byte */ 
     [responseHexDataArray removeObjectAtIndex: 0]; 
     [responseHexDataArray removeObjectAtIndex: 0]; 
     [responseHexDataArray removeObjectAtIndex: 0]; 
     [responseHexDataArray removeObjectAtIndex: 0]; 

     // Convert Array to Srting 
     NSString * responceHexString = [[responseHexDataArray valueForKey:@"description"] componentsJoinedByString:@""]; 
     //NSLog(@"responceHexStringWithBracket : %@",responceHexString); 

     // Remove '<' and '>' from Hex response 
     responceHexString = [[responceHexString stringByReplacingOccurrencesOfString:@"<" 
                   withString:@""] 
        mutableCopy]; 
     responceHexString = [[responceHexString stringByReplacingOccurrencesOfString:@">" 
                withString:@""] 
        mutableCopy]; 

     //NSLog(@"responceHexString After Removing Bracket : %@",responceHexString); 

     NSMutableString * responseJsonString = [[NSMutableString alloc] init]; 
     int i = 0; 
     while (i < [responceHexString length]) 
     { 
      NSString * hexChar = [responceHexString substringWithRange: NSMakeRange(i, 2)]; 
      int value = 0; 
      sscanf([hexChar cStringUsingEncoding:NSASCIIStringEncoding], "%x", &value); 
      [responseJsonString appendFormat:@"%c", (char)value]; 
      i+=2; 
     } 
     //NSLog(@"responseJsonString : %@",responseJsonString); 
     [self insertRouterInfoToDBWithJson:responseJsonString]; 

    } 
    @catch(NSException* exception) 
    { 
     NSLog(@"processSmartRouterAssociationResponseWithArray exception : %@",exception); 
    } 

} 

Ich verwendete Code von Convert Hex to NSString und Convert NSArray to NSString.

0

Ich bin mir nicht sicher, was die Objekte in Ihrer NSMutableArray geben, aber wenn wir annehmen, sie sind NSString, die folgenden Werke (Conversion-Code von this post verwenden):

#import "Foundation/Foundation.h" 

// Extend NSString to initialize from an array of NSString hex values 
@interface NSString (HexConversion) 

+ (NSString *) stringFromHexArray:(NSArray *)array; 

@end 

@implementation NSString (HexConversion) 

// Assumes NSArray is filled with NSStrings representing hex values, could easily be changed 
+ (NSString *) stringFromHexArray:(NSArray *)array { 
    NSMutableString *mString = [[NSMutableString alloc] init]; 
    for(NSString *hexItem in array) { 
     int value = 0; 
     sscanf([hexItem cStringUsingEncoding:NSASCIIStringEncoding], "%x", &value); 
     [mString appendFormat:@"%c", (char)value]; 
    } 
    return mString; 
} 

@end 

int main(int argc, const char * argv[]) { 
    @autoreleasepool { 

     // Your test hex array 
     NSArray *testArray = @[@"01", @"ca", @"04", @"3a", @"7b", @"22", @"70", @"61", @"73", @"73", @"22", @"3a", @"22", @"6b", @"61", @"6e", @"6f", @"6b", @"22", @"2c", @"22", @"73", @"73", @"69", @"64", @"22", @"3a", @"22", @"6f", @"70", @"65", @"6e", @"57", @"72", @"74", @"41", @"70", @"6c", @"31", @"32", @"38", @"22", @"2c", @"22", @"75", @"73", @"65", @"72", @"22", @"3a", @"22", @"6b", @"61", @"6e", @"6f", @"6b", @"22", @"7d"]; 

     // Convert to string! 
     NSString *string = [NSString stringFromHexArray:testArray]; 

     // Verify conversion, prints Ê:{"pass":"kanok","ssid":"openWrtApl128","user":"kanok"} 
     NSLog(@"%@", string); 
    } 
    return 0; 
}