vc ++ 6.0串口通讯

时间:2008-12-03 05:21:23

标签: visual-c++ vc6

在vc ++中,我使用MScomm进行串行通信, 我收到了这种格式的数据02120812550006050.0, 我不知道怎么读这个,它的格式是什么, 乞求开始框架和结束结束文件,重拍我不知道。

编辑1:

它包含日期时间和数据我如何分离这个

2 个答案:

答案 0 :(得分:2)

有趣的字符是指示记录开始,记录结束,字段分隔符等内容的标记。在不知道实际协议的情况下,这有点难以辨别。

数据更容易。

在000f和0002标记之间,你有一个日期/时间字段,2008年12月2日,12:55:00。

在0002和0003标记之间,它看起来像一个简单的浮点数,可能是一个美元价值或任何非常值,它取决于链接另一端的内容。

要分开它,我假设你已经把它读成某种可变字符数组。只需查找标记并提取它们之间的字段。

日期/时间是固定大小,值也可能是(因为它有一个前导0),所以你可能只需使用memcpy从缓冲区中提取所需信息,null终止它们,转换为价值浮动,瞧。

如果是固定格式,您可以使用以下内容:

static void extract (char *buff, char *date, char *time, float *val) {
    // format is "\x01\x0fDDMMYYhhmmss\x02vvvvvvv\x03\x04"
    char temp[8];
    memcpy (date, buff +  2, 6); date[6] = '\0';
    memcpy (time, buff +  8, 6); time[6] = '\0';
    memcpy (temp, buff + 15, 7); temp[7] = '\0';
    *val = atof (temp);
}

并将其命名为:

char buff[26]; // must be pre-filled before calling extract()
char dt[8];
char tm[8];
float val;
extract (buffer, dt, tm, &val);

如果不是固定格式,您只需编写代码来检测字段分隔符的位置并提取它们之间的内容。

答案 1 :(得分:0)

除非您知道与之沟通的内容以及与您沟通的方式,否则您不太可能弄明白。 (提示 - 您可以尝试告诉我们)