#include #include #include #include #include #include "carmakercvt.h" static char gstr_inputpath[256]; static char gstr_outputpath[256]; static char gstr_grpcserver[256]; void print_useage() { std::cout<<" -i --input $xodrfile : set input file path. eq. -i d:/lk.xodr"<-r /* struct option { const char * name; // 参数的名称 int has_arg; // 是否带参数值,有三种:no_argument, required_argument,optional_argument int * flag; // 为空时,函数直接将 val 的数值从getopt_long的返回值返回出去, // 当非空时,val的值会被赋到 flag 指向的整型数中,而函数返回值为0 int val; // 用于指定函数找到该选项时的返回值,或者当flag非空时指定flag指向的数据的值 }; 其中: no_argument(即0),表明这个长参数不带参数(即不带数值,如:--name) required_argument(即1),表明这个长参数必须带参数(即必须带数值,如:--name Bob) optional_argument(即2),表明这个长参数后面带的参数是可选的,(即--name和--name Bob均可) */ static struct option long_options[] = { {"input", required_argument, NULL, 'i'}, {"output", required_argument, NULL, 'o'}, {"grpcserver", required_argument, NULL, 's'}, {"help", no_argument, NULL, 'h'}, // {"optarg", optional_argument, NULL, 'o'}, {0, 0, 0, 0} // 添加 {0, 0, 0, 0} 是为了防止输入空值 }; while ( (opt = getopt_long(argc, argv, optstring, long_options, &option_index)) != -1) { // printf("opt = %c\n", opt); // 命令参数,亦即 -a -b -n -r // printf("optarg = %s\n", optarg); // 参数内容 // printf("optind = %d\n", optind); // 下一个被处理的下标值 // printf("argv[optind - 1] = %s\n", argv[optind - 1]); // 参数内容 // printf("option_index = %d\n", option_index); // 当前打印参数的下标值 // printf("\n"); switch(opt) { case 'i': strncpy(gstr_inputpath,optarg,255); break; case 'o': strncpy(gstr_outputpath,optarg,255); break; case 's': strncpy(gstr_grpcserver,optarg,255); break; case 'h': print_useage(); nRtn = 1; //because use -h break; default: break; } } return nRtn; } std::string GetFileName(char * strpath) { int npos = -1; int nsize = static_cast(strnlen(strpath,256)); int i; for(i=(nsize-2);i>=0;i--) { if((strpath[i] == '/')||(strpath[i] == '\\')) { npos = i+1; break; } } std::string strrtn; if(npos == -1) { strrtn = strpath; } else { char strname[256]; strncpy(strname,strpath+npos,256); strrtn = strname; } return strrtn; } std::string GetServerstr() { std::string strserverstr = "111.33.136.149:50091"; QFile xFile; xFile.setFileName("carmakerservice.txt"); if(xFile.open(QIODevice::ReadOnly)) { char str[256]; xFile.readLine(str,256); std::cout<<" open file. server : "< pstr_ptr = nullptr; int ninputsize = 0; QFile xFile; xFile.setFileName(gstr_inputpath); if(xFile.open(QIODevice::ReadOnly)) { QByteArray ba= xFile.readAll(); ninputsize = ba.size(); if(ninputsize > 0) { pstr_ptr = std::shared_ptr(new char[ninputsize]); memcpy(pstr_ptr.get(),ba.data(),static_cast(ninputsize)); } xFile.close(); } else { std::cout<<"FATAL Errror. Can't Open input File. Please Check Input File."< pout_ptr; int noutputsize = 0; int nres; std::string strserverstr = GetServerstr(); if(strncmp(gstr_grpcserver , " ",255) != 0) { strserverstr = gstr_grpcserver; } std::cout<<" grpcserver: "<GetRes(strinputname,stroutputname,strcmd,pstr_ptr,ninputsize,pout_ptr,noutputsize); if(nres != 1) { std::cout<<" GetRes Fail.Fail Code is: "<