Новичок
Профиль
Группа: Участник
Сообщений: 2
Регистрация: 6.5.2017
Репутация: нет Всего: нет
|
Разделить строку и вывести результат на экране всем привет! пишу маленькую программу на c++, столкнулся с небольшой проблемой, которая портит весь результат. не могли ли вы помочь? Описание программы.буфер "32,225228.000,A,5540.613048,N,3741.581676,E,2.22,112.47,240417,,E,A" вызываем подпрограмму get_GPS Далее чтение из буфера 5540.613048 чтение из буфера N вызываем подпрограмму convert2Degrees конвертируем строчное число 5540.613048 в число с плавающей точкой float 5540.613048==>55 5540.613048==>44 5540.613048==>0.613048*60= 36,78288 конвертируем число с плавающей точкой 55, 44 36,78288 в строку 55°40'36,7828"N чтение из буфера 3741.581676 чтение из буфера E вызываем подпрограмму convert2Degrees конвертируем строчное число 3741.581676 в число с плавающей точкой float 3741.581676==>37 3741.581676==>41 3741.581676==>0.581676*60= 34.90056 конвертируем число с плавающей точкой 37, 41 34.90056 в строку 37°41'34.9005"E чтение из буфера 2.22 конвертируем строчное число 2.22 в число с плавающей точкой float 2.22*1.852=4.11 конвертируем число с плавающей точкой 4.11 в строку чтение из буфера 112.47 печатаем на экране результат 55°40'36,7828"N печатаем на экране результат 37°41'34.9005"E печатаем на экране результат 4.11 печатаем на экране результат 112.47 Код программыКод |
#include <iostream> #include <cstdlib> #include <stdio.h> #include <math.h> #include <string.h>
using namespace std;
char RMC_buffer[]="32,225228.000,A,5540.613048,N,3741.581676,E,2.22,112.47,240417,,E,A"; char latitude[15];
char longitude[15]; char speedOTG[8]; char course[8];
int convert2Degrees(char *coord1, char coordDir, char *coord){//input data coord1 and coordDir output coord int DD=0, MM=0; float SS=0; //memset(coord,0,sizeof(char)*15); SS=atof(coord1); //convert input data coord1 to float //5540.613048 = DDMM.mmmmmm from datasheet simcom 908 DD = (int)SS/100L; //extract DD MM = (int)SS % 100L; //extract MM SS=(SS-((DD*100)+MM))*60; //extract .mmmmmm and convert him to SS //dtostrf(SS, 2, 4, SS_SSSS); //convert float SS to string SS.SSSS sprintf(coord,"%d°%d\'%.4f\"%c",DD,MM,SS,coordDir);//regrupe DD°MM'SS.SSSS"N return 0; }
void get_GPS(char *buff, char *lat, char *log, char *spee_d, char *dir){ char latitude1[15]={0}, latitudeDir; char longitude1[15]={0}, longitudeDir; char *istr = 0; int len=0, i; float speed_f=0;
istr = strtok(buff, ","); //from buffer for (i=0; i<3; i++) istr = strtok(NULL,",");
len=strlen(istr); for(i=0; i < len; i++){ //Get latitude1 latitude1[i]=istr[i]; } latitude1[i++] = '\0';
istr = strtok(NULL,","); latitudeDir = istr[0]; // Get latitude directon
convert2Degrees(latitude1, latitudeDir, lat);
istr = strtok(NULL,","); len = strlen(istr); for(i=0; i < len; i++) //Get longitude1 longitude1[i]=istr[i]; longitude1[i++] = '\0';
istr = strtok(NULL,","); longitudeDir = istr[0];
convert2Degrees(longitude1, longitudeDir, log);
istr = strtok(NULL,","); len = strlen(istr); for(i=0; i < len; i++) // Get speed over ground. Unit is knots. spee_d[i]=istr[i]; spee_d[i++] = '\0'; speed_f=atof(spee_d); speed_f=speed_f*1.852; sprintf(spee_d,"%.2f",speed_f);
istr = strtok(NULL,","); len = strlen(istr); for(i=0; i < len; i++) //Get course dir[i]=istr[i]; dir[i++] = '\0';
}
/* void get_GPS(char *buff, char *lat, char *log,c har *spee_d, char *dir){
char latitude1[15]={0}, latitudeDir[2]={0}; char longitude1[15]={0}, longitudeDir[2]={0}; float speed_f=0;
strtok(buff, ","); //from buffer strtok(NULL, ","); strtok(NULL, ","); strcpy(latitude1,strtok(NULL, ",")); //Get latitude strcpy(latitudeDir,strtok(NULL, ",")); // Get latitude directon
convert2Degrees(latitude1, latitudeDir, lat);
strcpy(longitude1,strtok(NULL, ",")); // Get longitude strcpy(longitudeDir,strtok(NULL, ",")); // Get longitude directon
convert2Degrees(longitude1, longitudeDir, log);
strcpy(spee_d,strtok(NULL, ",")); // Get speed over ground. Unit is knots.
speed_f=atof(spee_d); speed_f=speed_f*1.852; sprintf(spee_d,"%.2f",speed_f);
strcpy(dir,strtok(NULL, ",")); // Get course
}*/
int main() { memset(latitude,0,sizeof(latitude)); memset(longitude,0,sizeof(longitude)); memset(speedOTG,0,sizeof(speedOTG)); memset(course,0,sizeof(course)); get_GPS(RMC_buffer,latitude, longitude, speedOTG, course ); //cout << latitude << endl; //printf("%s\n",latitude); printf("latitude = %s\n",latitude); printf("longitude = %s\n",longitude); printf("speedOTG = %s\n",speedOTG); printf("course = %s\n",course);
// printf("%s\n",longitude); // printf("%s\n",speedOTG); // printf("%s\n",course); return 0; }
|
проблема в том, что. на терминале совсем другое печатается Код | latitude = 55░40'36.7969"N37░41'34.9072"E4.11 longitude = 37░41'34.9072"E4.11 speedOTG = 4.11 course = 112.47
|
а должно быть так: Код | latitude =55░40'36.7969"N longitude =37░41'34.9072"E speedOTG = 4.11 course = 112.47
|
да, результаты не совпадают потому что я не использовал double. Эта программа будет перенесена на Arduino. а Arduino, float и double имеют такое же значение. спасибо.
|