2

これはデータ1です

RE00002200050046\00 0.00 0.1 0.125.9\0#####-  14    0##### \0   0#####   141.0\004.00 0: 00.000.0\00 4: 011:27 0: 015:27#\0###########2.00.0\0

私が持っている別のデータは This is DATA 2 です

RE000022601\0500460 0.00 0.1\0 0.236.8####\0#   57-   2#####-   3#####\0-  601.004.0\00 4: 00.000.\000 4: 013:37 0\0: 017:37#####\0#######2.00.\00

上記のデータは、病院のマシンから取得した応答です。上記の値を解析し、指定された形式に従って入力する必要があります。

BYTEs  2         2         4             128            2         2
   +---------+--------+------------+-----------------+--------+-------+
   |  RE     |  00    |  machine no|   Data part     |  Check | CRC   |
   |         |        |            |                 |   sum  |       |
   +---------+--------+------------+-----------------+--------+-------+ 

DATA 1 からわかるように、私のデータ部分は "000500.." から始まり、DATA 2 私のデータ部分は "601\0500..." から始まります。 "「DATA 1」からの長さは 3 バイトで、その値は「46」として取得されますが、「DATA 2」からはその値が「460」として取得されます。実際には、その値は「460」である必要があります。DATA 1 のようなデータを取得すると、「血液ポンプの流れ」が「3 バイト」であるため、値「46\0」が取得され、「0」 が追加されるため、解析ロジック全体が影響を受けます。 「血液ポンプ流量」は「460」である必要がありますが、別のフィールドに移動します。 上記は、他のフィールドでも何度も取得する1つのケースにすぎません。この問題を解決する方法。

DATA 1 と DATA 2 は、マシンから取得したバイナリ データです。

ここに画像の説明を入力

4

1 に答える 1

0

あなたの例から、あなた自身のコメントによって、あなたがあなたのフォーマットのフィールドサイズを知っていることが確認されたようです。したがって、この入力をバイナリ入力として扱う必要があります。関数を使用std::istream::readします。

unsigned char header[14];
is.read(header,14);
if (is.gcount() == 14)
{
    // decide which DATA1 or DATA2 you read from header contents
    if (header is for DATA1)
      // read rest of input as DATA1
    // decide which DATA1 or DATA2 you read from header contents
    else if (header is for DATA2)
      // read rest of input as DATA2
    else
      //report error
}
于 2012-10-04T09:33:16.170 に答える