【问题标题】:How to Convert NSMutableArray of Hex to NSString after removing some byte删除一些字节后如何将十六进制的 NSMutableArray 转换为 NSString
【发布时间】:2016-10-01 16:18:17
【问题描述】:

我收到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"}

我可以使用this website转换它

我知道我必须使用 Convert hex to nsstringConvert Hex to NSStingstringByReplacingOccurrencesOfString

如何转换?

【问题讨论】:

标签: objective-c arrays hex nsmutablearray ascii


【解决方案1】:

以下代码对我有用。

-(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 NSStringConvert NSArray to NSString 的代码。

【讨论】:

    【解决方案2】:

    我不确定你的 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;
    }
    

    【讨论】:

      猜你喜欢
      • 2012-06-16
      • 2011-05-15
      • 1970-01-01
      • 2017-04-03
      • 2017-08-23
      • 2011-03-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多