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