在 vc++ 中,我使用 MScomm 进行串行通信,我收到了这种格式 02120812550006050.0 的数据,我不知道如何读取它,它是什么格式,开始帧和结束文件,我仍然不知道。
编辑1:
它包含日期时间和数据我怎么能分开这个
在 vc++ 中,我使用 MScomm 进行串行通信,我收到了这种格式 02120812550006050.0 的数据,我不知道如何读取它,它是什么格式,开始帧和结束文件,我仍然不知道。
编辑1:
它包含日期时间和数据我怎么能分开这个
有趣的字符是指示记录开始、记录结束、字段分隔符等内容的标记。在不知道实际协议的情况下,这有点难以分辨。
数据就容易多了。
在 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);
如果不是固定格式,您只需要编写代码来检测字段分隔符的位置并提取它们之间的内容。
除非您知道自己在与什么交流以及它如何与您交流,否则您不太可能弄明白。(提示——你可以试着告诉我们)