как анализировать данные потока (строки) в разные файлы данных

@ everyone, у меня недавно возникла проблема с чтением данных из IMU.
Ниже приведены данные, которые я получил от Моего устройства, это ASCII, все они являются символами, и мой размер данных [122], который действительно большой, мне нужно преобразовать их в короткие, а затем плавать, но я не знаю, почему и как …..

unsigned char data[33];
short x,y,z;
float x_fl,y_fl,z_fl,t_fl;
float bias[3]={0,0,0};//array initialization
unsigned char sum_data=0;
int batch=0;
if ( !PurgeComm(file,PURGE_RXCLEAR ))
cout << "Clearing RX Buffer Error" << endl;//this if two sentence aim to clean the buffer

//---------------- read data from IMU ----------------------
do { ReadFile(file,&data_check,1,&read,NULL);
//if ((data_check==0x026))
{ ReadFile(file,&data,33,&read,NULL); }

///  Wx Values
{
x=(data[8]<<8)+data[9];
x_fl=(float)6.8664e-3*x;
bias[0]+=(float)x_fl;
}

///  Wy Values
{
y=(data[10]<<8)+data[11];
y_fl=(float)6.8664e-3*y;
bias[1]+=(float)y_fl;
}

///  Wz Values
{
z=(data[12]<<8)+data[13];
z_fl=(float)6.8664e-3*z;
bias[2]+=(float)z_fl;
}

batch++;

}while(batch<NUM_BATCH_BIAS);

$VNYMR,+049.320,-017.922,-024.946,+00.2829,-00.2734,+00.2735,-02.961,+03.858,-08.325,-00.001267,+00.000213,-00.001214*64

$VNYMR,+049.322,-017.922,-024.948,+00.2829,-00.2714,+00.2735,-02.958,+03.870,-08.323,+00.004923,-00.000783,+00.000290*65

$VNYMR,+049.321,-017.922,-024.949,+00.2821,-00.2655,+00.2724,-02.984,+03.883,-08.321,+00.000648,-00.000391,-00.000485*61

$VNYMR,+049.320,-017.922,-024.947,+00.2830,-00.2665,+00.2756,-02.983,+03.874,-08.347,-00.003416,+00.000437,+00.000252*6C

$VNYMR,+049.323,-017.921,-024.947,+00.2837,-00.2773,+00.2714,-02.955,+03.880,-08.326,+00.002570,-00.001066,+00.000690*67

$VNYMR,+049.325,-017.922,-024.948,+00.2847,-00.2715,+00.2692,-02.944,+03.875,-08.344,-00.002550,+00.000638,+00.000022*6A

$VNYMR,+049.326,-017.921,-024.945,+00.2848,-00.2666,+00.2713,-02.959,+03.876,-08.309,+00.002084,+00.000449,+00.000667*6A

все, что я хочу сделать, это:

  1. извлеките последние 6 чисел, разделенных запятыми, кстати, мне не нужны последние 3 символа (например, * 66).
  2. Сохраните извлеченные данные в 6 файлов .dat.

Каков наилучший способ сделать это?

Так как я получил эти необработанные данные из IMU, и мне нужны последние 6 данных, которые accelerations(x,y,z) а также gyros(x,y,z),

  1. Если кто-то может сказать мне, как установить счетчик в конце каждого потока данных, это будет идеально, потому что мне также нужна временная метка IMU.

Последнее слово, я делаю сбор данных под Windows, C ++.

Надеюсь, кто-нибудь может мне помочь, я волнуюсь из-за того, что так много дел, и это действительно раздражает !!

0

Решение

Существует целое семейство функций scanf (fscanf, sscanf и некоторые «безопасные»).
Предполагая, что вы прочитали строку в строку: —

sscanf( s, "VNYMR,%*f,%*f,%*f,%*f,%*f,%*f,%f,%f,%f,%f,%f,%f", &accX, &accY, &accZ, &gyroX, &gyroY, &gyroZ )

И при условии, что я посчитал правильно! Это подтвердит наличие буквального значения $ VNYMR, за которым последуют около пяти плавающих значений, которые вы не назначаете, и, наконец, шесть, которые вам не безразличны. &accaX и т. д. — это адреса ваших поплавков. Проверьте результат — количество выполненных заданий.

0

Другие решения

Других решений пока нет …