【问题标题】:How to scan hex integers, plural?如何扫描十六进制整数,复数?
【发布时间】:2015-11-10 21:58:30
【问题描述】:

我想从最多 20 个数字的空格分隔字符串中解析多个十六进制整数:

79 1A 03 00 09 21 22 AA BB CC DD EE FF A1 A2 A3 A4 A5 A6 A7

unsigned result = 0;
NSScanner *scanner = [NSScanner scannerWithString:@"79 1A 03 00"];

[scanner setScanLocation:0];
[scanner scanHexInt:&result];

但 scanHexInt 似乎只扫描一个值。有没有更简洁的方法将字符串扫描到值数组中?

scanHexInt docs

Objective-C parse hex string to integer

【问题讨论】:

  • 使用循环扫描每个值。

标签: objective-c hex


【解决方案1】:
  NSArray *numberTokens = [text componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@" "]];
  for (NSString* token in numberTokens) {
    if (0 < token.length) {
      NSLog(@"%@: %i", token, token.intValue);
    }
  }

【讨论】:

  • 使用更简单[text componentsSeparatedByString:@" "];
  • NSString intValue 不会解析十六进制值。它仅适用于十进制值。
【解决方案2】:

您可以使用大部分已有的代码,只需在循环中调整scanLocation

NSString *string = @"79 1A 03 00 09 21 22 AA BB CC DD EE FF A1 A2 A3 A4 A5 A6 A7";
unsigned result = 0;
NSScanner *scanner = [NSScanner scannerWithString:string];

// Skip ahead 3 characters (2 hex digits + 1 space)
// after each iteration.
for (NSUInteger i=0; i < string.length; i+=3) {
    [scanner setScanLocation:i];
    [scanner scanHexInt:&result];

    NSLog(@"%d", result);
}

【讨论】:

    猜你喜欢
    • 2012-02-20
    • 2021-09-29
    • 2015-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-26
    • 1970-01-01
    • 2010-10-10
    相关资源
    最近更新 更多