如何在删除一些字节后将十六进制的NSMutable数组转换为NSString



我收到NSMutableArray作为自定义Smart Router的响应

(<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"}

我可以使用这个网站转换它

我知道我必须使用将十六进制转换为 nsstring 或将十六进制转换为 NSSting 和字符串ByReplacingOccurrencesOfString

如何转换?

以下代码对我有用。

-(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

和 Convert NSArray to NSString 中的代码。

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

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

最新更新