Забавные символы - это маркеры, обозначающие такие вещи, как начало записи, конец записи, разделитель полей и так далее. Не зная действительного протокола, это немного сложно сказать.
Данные намного проще.
Между маркерами 000f и 0002 у вас есть поле даты / времени, 2 декабря 2008 г., 12: 55: 00.
Между маркерами 0002 и 0003 это выглядит как простое число с плавающей точкой, которое может иметь значение в долларах или вообще ничего, это зависит от того, что находится на другом конце ссылки.
Чтобы разделить его, я предполагаю, что вы прочитали его в какой-то переменный массив символов. Просто найдите маркеры и извлеките поля между ними.
Дата / время имеют фиксированный размер, и значение, вероятно, также (так как оно имеет начальный 0), так что вы можете просто использовать memcpy для извлечения необходимой вам информации из буфера, нулевого завершения, преобразования ее значение для поплавка и вуаля.
Если это фиксированный формат, вы можете использовать что-то вроде:
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);
Если не фиксированный формат, вам просто нужно написать код, чтобы определить позиции разделителей полей и извлечь то, что между ними.