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

我拥有的另一个数据是这是 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...”开始,在进行解析时,我遇到了一个问题,即有一个名为“Blood pump flow”的字段" 其长度为“DATA 1”的 3 个字节,我们得到它的值为“46”,而从“DATA 2”得到它的值为“460”。实际上,它的值应该是“460”如果我得到一个像 DATA 1 这样的数据,我的整个解析逻辑都会受到影响,因为“血泵流量”是“3 个字节”,我得到一个值“46\0”并且添加了“0” 到另一个字段,而“血泵流量”应为“460”。 以上只是我在其他一些领域也多次得到它的一种情况。如何解决这个问题。

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 回答