1

早上好,

我正在从连接到 iPad 的串行设备中检索字节流。连接后,提供的 SDK 将使用已转发的字节调用委托方法。

串口设备通过 SDK 转发的读数格式如下:

!X1:000.0;

一旦连接到串行设备,委托的方法将立即开始接收数据 - 这可能处于各种完成状态,即

:000.00;

我需要做的是建立一种具体的方法来拆分从串行设备返回的读数,以便我可以操作数据。

一些尝试过的选项是:

只需将接收到的字符串连接一段固定的时间,然后在“;”上拆分 NSString 特点。虽然这有点低效,并且不允许我动态操作数据

-(void)receivingDelegateMethod:(NSString *)aString    {
      if(counter < 60){
          [self.PropertyString stringByAppendingString:aString];
      }else{
          NSArray *readings = [self.PropertyString componentsSeparatedByString: @";"];
      }    
}

通过寻找“!”确定起点 字符,然后将生成的子字符串附加到 NSString 属性。之前对委托方法的所有调用都将附加到此属性,然后删除前 10 个字符。

我知道还有其他选项,例如 NSScanners 和 RegEx,但我想在浪费更多时间使用不同方法之前获得社区的意见。

谢谢

4

1 回答 1

0

制作一个BOOL指示流已初始化的标志,并将其设置为 false。当您收到下一个数据块时,首先检查标志。如果未设置,请跳过所有字符,直到看到感叹号'!'。一旦你看到它,丢弃它前面的所有内容,并将字符串的其余部分复制到缓冲区中。如果设置了“已初始化”标志,则将整个字符串附加到缓冲区而不跳过字符。

完成追加后,扫描缓冲区以查找!;分隔的部分。对于该模式的每次出现,使用该模式的完整部分调用指定的方法。您可以花哨,并定义自己的“辅助”委托来处理预先验证的字符串。

您可能需要检测断开连接,并将“已初始化”标志设置回NO.

于 2012-04-14T13:13:54.953 回答