Есть ли какой-либо метод в Objective C, который преобразовывает шестнадцатеричную строку в байты? Например, @"1156FFCD3430AA22"
к unsigned char array {0x11, 0x56, 0xFF, ...}
.
Не так, как вы это делаете. Вам нужно будет написать свой собственный метод, который будет принимать каждые два символа, интерпретировать их как int и сохранять их в массиве.
@interface NSString (NSStringHexToBytes)
-(NSData*) hexToBytes ;
@end
@implementation NSString (NSStringHexToBytes)
-(NSData*) hexToBytes {
NSMutableData* data = [NSMutableData data];
int idx;
for (idx = 0; idx+2 <= self.length; idx+=2) {
NSRange range = NSMakeRange(idx, 2);
NSString* hexStr = [self substringWithRange:range];
NSScanner* scanner = [NSScanner scannerWithString:hexStr];
unsigned int intValue;
[scanner scanHexInt:&intValue];
[data appendBytes:&intValue length:1];
}
return data;
}
@end
/// example
unsigned char bytes[] = { 0x11, 0x56, 0xFF, 0xCD, 0x34, 0x30, 0xAA, 0x22 };
NSData* expectedData = [NSData dataWithBytes:bytes length:sizeof(bytes)];
NSLog(@"data %@", [@"1156FFCD3430AA22" hexToBytes]);
NSLog(@"expectedData isEqual:%d", [expectedData isEqual:[@"1156FFCD3430AA22" hexToBytes]]);
scanHexInt:
и аналогичные методы NSScanner
могут быть полезны в том, что вы хотите, но вы ' d, вероятно, сначала потребуется разбить строку на более мелкие части, и в этом случае выполнение перевода вручную может быть проще, чем использование NSScanner
.