NSString (шестнадцатеричное число) к байтам

Есть ли какой-либо метод в Objective C, который преобразовывает шестнадцатеричную строку в байты? Например, @"1156FFCD3430AA22" к unsigned char array {0x11, 0x56, 0xFF, ...}.

20
задан JAL 20 July 2016 в 19:02
поделиться

3 ответа

Не так, как вы это делаете. Вам нужно будет написать свой собственный метод, который будет принимать каждые два символа, интерпретировать их как int и сохранять их в массиве.

2
ответ дан 29 November 2019 в 22:40
поделиться
@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]]);
21
ответ дан 29 November 2019 в 22:40
поделиться

scanHexInt: и аналогичные методы NSScanner могут быть полезны в том, что вы хотите, но вы ' d, вероятно, сначала потребуется разбить строку на более мелкие части, и в этом случае выполнение перевода вручную может быть проще, чем использование NSScanner .

3
ответ дан 29 November 2019 в 22:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: