删除一些字节后如何将 Hex 的 NSMutableArray 转换为 NSString

How to Convert NSMutableArray of Hex to NSString after removing some byte

我收到来自自定义 Smart Router

的回复 NSMutableArray
(<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>
)

我需要避免前 4 个数据,然后将其转换为 (ASCII) 的 NSString,如下所示

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

我可以使用this website

转换它

我知道我必须使用 Convert hex to nsstring or Convert Hex to NSSting and stringByReplacingOccurrencesOfString

如何转换?

我不确定你的 NSMutableArray 中的对象是什么类型,但如果我们假设它们是 NSString,则以下工作(使用来自 this post 的转换代码):

#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;
}

以下代码对我有用。

-(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);
    }

}

我使用了 Convert Hex to NSString and Convert NSArray to NSString 中的代码。