Visual c++ vc++;6.0串行通信

Visual c++ vc++;6.0串行通信,visual-c++,visual-c++-6,Visual C++,Visual C++ 6,在vc++中,我使用MScomm进行串行通信, 我收到的数据格式为02120812550006050.0, 我不知道该怎么读,它是什么格式的, 开始帧和结束帧的文件,我不知道 编辑1: 它包含日期、时间和数据,我可以如何区分这一个,除非你知道你在与什么交流,以及它是如何与你交流的,否则你不太可能理解它。(提示--您可以试着告诉我们)这些有趣的字符是表示记录开始、记录结束、字段分隔符等的标记。在不知道实际协议的情况下,有点难说 数据要容易得多 在000f和0002标记之间有一个日期/时间字段,20

在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);
如果不是固定格式,您只需编写代码来检测字段分隔符的位置并提取它们之间的内容