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 に答える