记录部分rtklib源码中出现的基础函数,便于自己理解与分析。

目录

1、C库函数

1.1、strstr()

1.2、strchr()和strrchr()

1.3、strnmp()和strncmp()

1.4、strcpy()和strncpy()

1.5、malloc()

1.6、fopen()

1.7、fgets()

1.8、fabs()

2、RTKLIB定义函数

2.1、setstr()

2.2、str2num()

2.3 、convcode()

2.4、utc2gpst()

2.5、timediff

2.6、set_index()

2.7、obs2code

2.8、satsys()

2.9、satid2no()


1、C库函数

1.1、strstr()

char *strstr(const char *haystack, const char *needle)在字符串 haystack 中查找第一次出现字符串 needle 的位置,不包含终止符 '\0'。

1.2、strchr()和strrchr()

char *strchr(const char *str, int c)在参数 str 所指向的字符串中搜索第一次出现字符 c(一个无符号字符)的位置。

char *strrchr(const char *str, int c)与 strchr 函数一样,它同样表示在字符串 str从后往前查找字符 c,返回字符 c 第一次在字符串 str 中出现的位置,如果未找到字符 c,则返回 NULL。

1.3、strnmp()和strncmp()

int strcmp(const char *str1, const char *str2)比较str1、str2两个字符串,若str1、s2字符串相等,则返回零;若str1大于str2,则返回大于零的数;否则,则返回小于零的数。

int strncmp(const char *str1, const char *str2, size_t n) 把 str1 和 str2 进行比较,最多比较前 n 个字节,返回值与strcmp()一样

1.4、strcpy()和strncpy()

char *strcpy(char *dest, const char *src) 把 src 所指向的字符串复制到 dest

char *strncpy(char *dest, const char *src, size_t n) 把 src 所指向的字符串复制到 dest,最多复制 n 个字符。当 src 的长度小于 n 时,dest 的剩余部分将用空字节填充

1.5、malloc()

void* malloc(size_t size)成功时,返回指向新分配内存的指针。为避免内存泄漏,必须用 free() 或 realloc() 解分配返回的指针;失败时,返回空指针。size为要分配的字符数。

1.6、fopen()

FILE *fopen(const char *filename, const char *mode) 使用给定的模式 mode 打开 filename 所指向的文件。

"r" 打开一个用于读取的文件。该文件必须存在。
"w" 创建一个用于写入的空文件。如果文件名称与已存在的文件相同,则会删除已有文件的内容,文件被视为一个新的空文件。
"a" 追加到一个文件。写操作向文件末尾追加数据。如果文件不存在,则创建文件。
"r+" 打开一个用于更新的文件,可读取也可写入。该文件必须存在。
"w+" 创建一个用于读写的空文件。
"a+" 打开一个用于读取和追加的文件。

1.7、fgets()

char *fgets(char *str, int n, FILE *stream) 从指定的流stream读取一行,并把它存储在 str 所指向的字符串内。当读取 (n-1) 个字符时,或者读取到换行符时,或者到达文件末尾时,它会停止,具体视情况而定。

1.8、fabs()

double fabs(double x) 返回 x 的绝对值。

2、RTKLIB定义函数

2.1、setstr()

函数将 src字符串中长度为n的字串,复制给dst,长度必须小于strlen(dst),但是无论n为多少,dst的内容都被覆盖

/* set string without tail space ---------------------------------------------*/
static void setstr(char *dst, const char *src, int n)
{char *p=dst;const char *q=src;while (*q&&q<src+n) *p++=*q++;*p--='\0';while (p>=dst&&*p==' ') *p--='\0';//子符串中空格与dst最后一格均补上'\0'
}

2.2、str2num()

s是需要复制的字符串,i是从s中第i个字符开始,一直截取n位,然后将截取的字符串转化为数值类型。

extern double str2num(const char *s, int i, int n)
{double value;char str[256],*p=str;if (i<0||(int)strlen(s)<i||(int)sizeof(str)-1<n) return 0.0;//检验i必须大于0,起始的i位置必须小于原字符串的长度,复制总数必须小于str数组的长度for (s+=i;*s&&--n>=0;s++) *p++=*s=='d'||*s=='D'?'E':*s;//将原字符串s全部复制到str数组中,若其中有 d/D 改成 E 进行存储*p='\0';return sscanf(str,"%lf",&value)==1?value:0.0;//将str以长浮点型格式放入value,成功则返回value值,不成功返回0
}

2.3 、convcode()

ver是版本号,sys是系统类型,对应系统将rnx3以下的版本的观测类型符号转化为rnx3的观测类型符号

/* convert RINEX obs-type ver.2 -> ver.3 -------------------------------------*/
static void convcode(double ver, int sys, const char *str, char *type)
{strcpy(type,"   ");if      (!strcmp(str,"P1")) { /* ver.2.11 GPS L1PY,GLO L2P */if      (sys==SYS_GPS) sprintf(type,"%c1W",'C');else if (sys==SYS_GLO) sprintf(type,"%c1P",'C');}else if (!strcmp(str,"P2")) { /* ver.2.11 GPS L2PY,GLO L2P */if      (sys==SYS_GPS) sprintf(type,"%c2W",'C');else if (sys==SYS_GLO) sprintf(type,"%c2P",'C');}else if (!strcmp(str,"C1")) { /* ver.2.11 GPS L1C,GLO L1C/A */if      (ver>=2.12) ; /* reject C1 for 2.12 */else if (sys==SYS_GPS) sprintf(type,"%c1C",'C');else if (sys==SYS_GLO) sprintf(type,"%c1C",'C');else if (sys==SYS_GAL) sprintf(type,"%c1X",'C'); /* ver.2.12 */else if (sys==SYS_QZS) sprintf(type,"%c1C",'C');else if (sys==SYS_SBS) sprintf(type,"%c1C",'C');}else if (!strcmp(str,"C2")) {if (sys==SYS_GPS) {if (ver>=2.12) sprintf(type,"%c2W",'C'); /* L2P(Y) */else           sprintf(type,"%c2X",'C'); /* L2C */}else if (sys==SYS_GLO) sprintf(type,"%c2C",'C');else if (sys==SYS_QZS) sprintf(type,"%c2X",'C');else if (sys==SYS_CMP) sprintf(type,"%c2X",'C'); /* ver.2.12 B1_2 */}else if (ver>=2.12&&str[1]=='A') { /* ver.2.12 L1C/A */if      (sys==SYS_GPS) sprintf(type,"%c1C",str[0]);else if (sys==SYS_GLO) sprintf(type,"%c1C",str[0]);else if (sys==SYS_QZS) sprintf(type,"%c1C",str[0]);else if (sys==SYS_SBS) sprintf(type,"%c1C",str[0]);}else if (ver>=2.12&&str[1]=='B') { /* ver.2.12 GPS L1C */if      (sys==SYS_GPS) sprintf(type,"%c1X",str[0]);else if (sys==SYS_QZS) sprintf(type,"%c1X",str[0]);}else if (ver>=2.12&&str[1]=='C') { /* ver.2.12 GPS L2C */if      (sys==SYS_GPS) sprintf(type,"%c2X",str[0]);else if (sys==SYS_QZS) sprintf(type,"%c2X",str[0]);}else if (ver>=2.12&&str[1]=='D') { /* ver.2.12 GLO L2C/A */if      (sys==SYS_GLO) sprintf(type,"%c2C",str[0]);}else if (ver>=2.12&&str[1]=='1') { /* ver.2.12 GPS L1PY,GLO L1P */if      (sys==SYS_GPS) sprintf(type,"%c1W",str[0]);else if (sys==SYS_GLO) sprintf(type,"%c1P",str[0]);else if (sys==SYS_GAL) sprintf(type,"%c1X",str[0]); /* tentative */else if (sys==SYS_CMP) sprintf(type,"%c2X",str[0]); /* extension */}else if (ver<2.12&&str[1]=='1') {if      (sys==SYS_GPS) sprintf(type,"%c1C",str[0]);else if (sys==SYS_GLO) sprintf(type,"%c1C",str[0]);else if (sys==SYS_GAL) sprintf(type,"%c1X",str[0]); /* tentative */else if (sys==SYS_QZS) sprintf(type,"%c1C",str[0]);else if (sys==SYS_SBS) sprintf(type,"%c1C",str[0]);}else if (str[1]=='2') {if      (sys==SYS_GPS) sprintf(type,"%c2W",str[0]);else if (sys==SYS_GLO) sprintf(type,"%c2P",str[0]);else if (sys==SYS_QZS) sprintf(type,"%c2X",str[0]);else if (sys==SYS_CMP) sprintf(type,"%c2X",str[0]); /* ver.2.12 B1_2 */}else if (str[1]=='5') {if      (sys==SYS_GPS) sprintf(type,"%c5X",str[0]);else if (sys==SYS_GAL) sprintf(type,"%c5X",str[0]);else if (sys==SYS_QZS) sprintf(type,"%c5X",str[0]);else if (sys==SYS_SBS) sprintf(type,"%c5X",str[0]);}else if (str[1]=='6') {if      (sys==SYS_GAL) sprintf(type,"%c6X",str[0]);else if (sys==SYS_QZS) sprintf(type,"%c6X",str[0]);else if (sys==SYS_CMP) sprintf(type,"%c6X",str[0]); /* ver.2.12 B3 */}else if (str[1]=='7') {if      (sys==SYS_GAL) sprintf(type,"%c7X",str[0]);else if (sys==SYS_CMP) sprintf(type,"%c7X",str[0]); /* ver.2.12 B2b */}else if (str[1]=='8') {if      (sys==SYS_GAL) sprintf(type,"%c8X",str[0]);}trace(3,"convcode: ver=%.2f sys=%2d type= %s -> %s\n",ver,sys,str,type);
}

2.4、utc2gpst()

将utc时间转换为gpst时间

/* utc to gpstime --------------------------------------------------------------
* convert utc to gpstime considering leap seconds
* args   : gtime_t t        I   time expressed in utc
* return : time expressed in gpstime
* notes  : ignore slight time offset under 100 ns
*-----------------------------------------------------------------------------*/
extern gtime_t utc2gpst(gtime_t t)
{int i;for (i=0;leaps[i][0]>0;i++) {if (timediff(t,epoch2time(leaps[i]))>=0.0) return timeadd(t,-leaps[i][6]);}return t;
}

2.5、timediff

获得t1-t2两个时间的时间差

/* time difference -------------------------------------------------------------
* difference between gtime_t structs
* args   : gtime_t t1,t2    I   gtime_t structs
* return : time difference (t1-t2) (s)
*-----------------------------------------------------------------------------*/
extern double timediff(gtime_t t1, gtime_t t2)
{return difftime(t1.time,t2.time)+t1.sec-t2.sec;
}

2.6、set_index()

未了解

/* set signal index ----------------------------------------------------------*/
static void set_index(double ver, int sys, const char *opt,char tobs[MAXOBSTYPE][4], sigind_t *ind)
{const char *p;char str[8],*optstr="";double shift;int i,j,k,n;for (i=n=0;*tobs[i];i++,n++) {ind->code[i]=obs2code(tobs[i]+1);ind->type[i]=(p=strchr(obscodes,tobs[i][0]))?(int)(p-obscodes):0;ind->idx[i]=code2idx(sys,ind->code[i]);ind->pri[i]=getcodepri(sys,ind->code[i],opt);ind->pos[i]=-1;}/* parse phase shift options */switch (sys) {case SYS_GPS: optstr="-GL%2s=%lf"; break;case SYS_GLO: optstr="-RL%2s=%lf"; break;case SYS_GAL: optstr="-EL%2s=%lf"; break;case SYS_QZS: optstr="-JL%2s=%lf"; break;case SYS_SBS: optstr="-SL%2s=%lf"; break;case SYS_CMP: optstr="-CL%2s=%lf"; break;case SYS_IRN: optstr="-IL%2s=%lf"; break;}for (p=opt;p&&(p=strchr(p,'-'));p++) {if (sscanf(p,optstr,str,&shift)<2) continue;for (i=0;i<n;i++) {if (strcmp(code2obs(ind->code[i]),str)) continue;ind->shift[i]=shift;trace(2,"phase shift: sys=%2d tobs=%s shift=%.3f\n",sys,tobs[i],shift);}}/* assign index for highest priority code */for (i=0;i<NFREQ;i++) {for (j=0,k=-1;j<n;j++) {if (ind->idx[j]==i&&ind->pri[j]&&(k<0||ind->pri[j]>ind->pri[k])) {k=j;}}if (k<0) continue;for (j=0;j<n;j++) {if (ind->code[j]==ind->code[k]) ind->pos[j]=i;}}/* assign index of extended observation data */for (i=0;i<NEXOBS;i++) {for (j=0;j<n;j++) {if (ind->code[j]&&ind->pri[j]&&ind->pos[j]<0) break;}if (j>=n) break;for (k=0;k<n;k++) {if (ind->code[k]==ind->code[j]) ind->pos[k]=NFREQ+i;}}/* list rejected observation types */for (i=0;i<n;i++) {if (!ind->code[i]||!ind->pri[i]||ind->pos[i]>=0) continue;trace(4,"reject obs type: sys=%2d, obs=%s\n",sys,tobs[i]);}ind->n=n;#if 0 /* for debug */for (i=0;i<n;i++) {trace(2,"set_index: sys=%2d,tobs=%s code=%2d pri=%2d idx=%d pos=%d shift=%5.2f\n",sys,tobs[i],ind->code[i],ind->pri[i],ind->idx[i],ind->pos[i],ind->shift[i]);}
#endif
}

2.7、obs2code

将观测类型转化为对应观测码

/* obs type string to obs code -------------------------------------------------
* convert obs code type string to obs code
* args   : char   *str   I      obs code string ("1C","1P","1Y",...)
* return : obs code (CODE_???)
* notes  : obs codes are based on RINEX 3.04
*-----------------------------------------------------------------------------*/
extern uint8_t obs2code(const char *obs)
{int i;for (i=1;*obscodes[i];i++) {if (strcmp(obscodes[i],obs)) continue;return (uint8_t)i;}return CODE_NONE;
}
static char *obscodes[]={       /* observation code strings */""  ,"1C","1P","1W","1Y", "1M","1N","1S","1L","1E", /*  0- 9 */"1A","1B","1X","1Z","2C", "2D","2S","2L","2X","2P", /* 10-19 */"2W","2Y","2M","2N","5I", "5Q","5X","7I","7Q","7X", /* 20-29 */"6A","6B","6C","6X","6Z", "6S","6L","8L","8Q","8X", /* 30-39 */"2I","2Q","6I","6Q","3I", "3Q","3X","1I","1Q","5A", /* 40-49 */"5B","5C","9A","9B","9C", "9X","1D","5D","5P","5Z", /* 50-59 */"6E","7D","7P","7Z","8D", "8P","4A","4B","4X",""    /* 60-69 */
};//预计调用TYPE OF OBS后两位字符,例如C1C调用1C

2.8、satsys()

通过识别卫星在文件中所处的位数以及prn号为sys赋值对应系统

/* satellite number to satellite system ----------------------------------------
* convert satellite number to satellite system
* args   : int    sat       I   satellite number (1-MAXSAT)
*          int    *prn      IO  satellite prn/slot number (NULL: no output)
* return : satellite system (SYS_GPS,SYS_GLO,...)
*-----------------------------------------------------------------------------*/
extern int satsys(int sat, int *prn)
{int sys=SYS_NONE;if (sat<=0||MAXSAT<sat) sat=0;else if (sat<=NSATGPS) {sys=SYS_GPS; sat+=MINPRNGPS-1;}else if ((sat-=NSATGPS)<=NSATGLO) {sys=SYS_GLO; sat+=MINPRNGLO-1;}else if ((sat-=NSATGLO)<=NSATGAL) {sys=SYS_GAL; sat+=MINPRNGAL-1;}else if ((sat-=NSATGAL)<=NSATQZS) {sys=SYS_QZS; sat+=MINPRNQZS-1; }else if ((sat-=NSATQZS)<=NSATCMP) {sys=SYS_CMP; sat+=MINPRNCMP-1; }else if ((sat-=NSATCMP)<=NSATIRN) {sys=SYS_IRN; sat+=MINPRNIRN-1; }else if ((sat-=NSATIRN)<=NSATLEO) {sys=SYS_LEO; sat+=MINPRNLEO-1; }else if ((sat-=NSATLEO)<=NSATSBS) {sys=SYS_SBS; sat+=MINPRNSBS-1; }else sat=0;if (prn) *prn=sat;return sys;
}

2.9、satid2no()

通过卫星id匹配对应系统以及prn号(目前还未清楚id具体是什么)

/* satellite id to satellite number --------------------------------------------
* convert satellite id to satellite number
* args   : char   *id       I   satellite id (nn,Gnn,Rnn,Enn,Jnn,Cnn,Inn or Snn)
* return : satellite number (0: error)
* notes  : 120-142 and 193-199 are also recognized as sbas and qzss
*-----------------------------------------------------------------------------*/
extern int satid2no(const char *id)
{int sys,prn;char code;if (sscanf(id,"%d",&prn)==1) {if      (MINPRNGPS<=prn&&prn<=MAXPRNGPS) sys=SYS_GPS;else if (MINPRNSBS<=prn&&prn<=MAXPRNSBS) sys=SYS_SBS;else if (MINPRNQZS<=prn&&prn<=MAXPRNQZS) sys=SYS_QZS;else return 0;return satno(sys,prn);}if (sscanf(id,"%c%d",&code,&prn)<2) return 0;switch (code) {case 'G': sys=SYS_GPS; prn+=MINPRNGPS-1; break;case 'R': sys=SYS_GLO; prn+=MINPRNGLO-1; break;case 'E': sys=SYS_GAL; prn+=MINPRNGAL-1; break;case 'J': sys=SYS_QZS; prn+=MINPRNQZS-1; break;case 'C': sys=SYS_CMP; prn+=MINPRNCMP-1; break;case 'I': sys=SYS_IRN; prn+=MINPRNIRN-1; break;case 'L': sys=SYS_LEO; prn+=MINPRNLEO-1; break;case 'S': sys=SYS_SBS; prn+=100; break;default: return 0;}return satno(sys,prn);
}

2.10、repstr()函数

/* replace string ------------------------------------------------------------*/
static int repstr(char *str, const char *pat, const char *rep)
{int len=(int)strlen(pat);//通配符长度char buff[1024]={'\0'},*p,*q,*r;for (p=str,r=buff;*p;p=q+len) {if (!(q=strstr(p,pat))) break;//检查是否含有指定通配符strncpy(r,p,q-p);r+=q-p;r+=sprintf(r,"%s",rep);}if (p<=str) return 0;strcpy(r,p);strcpy(str,buff);return 1;
}

2.11、reppath()函数

如果输入文件(file)中,含有通配符,则 reppath函数的目的就是将file[]文件名中的通配符进行替换,保存到rpath中;这个根据输入的文件名是否含通配符而定

/* replace keywords in file path -----------------------------------------------
* replace keywords in file path with date, time, rover and base station id
* args   : char   *path     I   file path (see below)
*          char   *rpath    O   file path in which keywords replaced (see below)
*          gtime_t time     I   time (gpst)  (time.time==0: not replaced)
*          char   *rov      I   rover id string        ("": not replaced)
*          char   *base     I   base station id string ("": not replaced)
* return : status (1:keywords replaced, 0:no valid keyword in the path,
*                  -1:no valid time)
* notes  : the following keywords in path are replaced by date, time and name
*              %Y -> yyyy : year (4 digits) (1900-2099)
*              %y -> yy   : year (2 digits) (00-99)
*              %m -> mm   : month           (01-12)
*              %d -> dd   : day of month    (01-31)
*              %h -> hh   : hours           (00-23)
*              %M -> mm   : minutes         (00-59)
*              %S -> ss   : seconds         (00-59)
*              %n -> ddd  : day of year     (001-366)
*              %W -> wwww : gps week        (0001-9999)
*              %D -> d    : day of gps week (0-6)
*              %H -> h    : hour code       (a=0,b=1,c=2,...,x=23)
*              %ha-> hh   : 3 hours         (00,03,06,...,21)
*              %hb-> hh   : 6 hours         (00,06,12,18)
*              %hc-> hh   : 12 hours        (00,12)
*              %t -> mm   : 15 minutes      (00,15,30,45)
*              %r -> rrrr : rover id
*              %b -> bbbb : base station id
*-----------------------------------------------------------------------------*/
extern int reppath(const char *path, char *rpath, gtime_t time, const char *rov,const char *base)
{double ep[6],ep0[6]={2000,1,1,0,0,0};int week,dow,doy,stat=0;char rep[64];strcpy(rpath,path);if (!strstr(rpath,"%")) return 0;if (*rov ) stat|=repstr(rpath,"%r",rov );if (*base) stat|=repstr(rpath,"%b",base);if (time.time!=0) {time2epoch(time,ep);ep0[0]=ep[0];dow=(int)floor(time2gpst(time,&week)/86400.0);把时间向下取整doy=(int)floor(timediff(time,epoch2time(ep0))/86400.0)+1;sprintf(rep,"%02d",  ((int)ep[3]/3)*3);   stat|=repstr(rpath,"%ha",rep);sprintf(rep,"%02d",  ((int)ep[3]/6)*6);   stat|=repstr(rpath,"%hb",rep);sprintf(rep,"%02d",  ((int)ep[3]/12)*12); stat|=repstr(rpath,"%hc",rep);sprintf(rep,"%04.0f",ep[0]);              stat|=repstr(rpath,"%Y",rep);sprintf(rep,"%02.0f",fmod(ep[0],100.0));  stat|=repstr(rpath,"%y",rep);sprintf(rep,"%02.0f",ep[1]);              stat|=repstr(rpath,"%m",rep);sprintf(rep,"%02.0f",ep[2]);              stat|=repstr(rpath,"%d",rep);sprintf(rep,"%02.0f",ep[3]);              stat|=repstr(rpath,"%h",rep);sprintf(rep,"%02.0f",ep[4]);              stat|=repstr(rpath,"%M",rep);sprintf(rep,"%02.0f",floor(ep[5]));       stat|=repstr(rpath,"%S",rep);sprintf(rep,"%03d",  doy);                stat|=repstr(rpath,"%n",rep);sprintf(rep,"%04d",  week);               stat|=repstr(rpath,"%W",rep);sprintf(rep,"%d",    dow);                stat|=repstr(rpath,"%D",rep);sprintf(rep,"%c",    'a'+(int)ep[3]);     stat|=repstr(rpath,"%H",rep);sprintf(rep,"%02d",  ((int)ep[4]/15)*15); stat|=repstr(rpath,"%t",rep);}else if (strstr(rpath,"%ha")||strstr(rpath,"%hb")||strstr(rpath,"%hc")||strstr(rpath,"%Y" )||strstr(rpath,"%y" )||strstr(rpath,"%m" )||strstr(rpath,"%d" )||strstr(rpath,"%h" )||strstr(rpath,"%M" )||strstr(rpath,"%S" )||strstr(rpath,"%n" )||strstr(rpath,"%W" )||strstr(rpath,"%D" )||strstr(rpath,"%H" )||strstr(rpath,"%t" )) {return -1; /* no valid time */}return stat;
}

RTKlib软件源码学习(常用函数部分,待补充)相关推荐

  1. RTKLIB软件源码学习(Kalman滤波-矩阵先导)

    本文是学习记录关于rib源码中使用的kalman滤波,因为整个定位系统存在误差以及不确定性,需要使用kalman滤波进行预测和平滑,在rtklib中使用的是EKF,即扩展kalman滤波,具体关于ka ...

  2. RTKLIB软件源码学习(Kalman滤波最小二乘)

    由于RTKLIB源码的最小二乘和kalman滤波函数邻近,这里直接一起解读.函数部分整体并不难,在了解初级矩阵函数的使用后就可以知道每一步代表的意思. 首先是kalman的核心公式,这里仅基于公式进行 ...

  3. 帝国cms cj1.php,帝国cms源码中常用函数所在位置

    帝国cms源码中常用函数所在位置 发布时间:2014-03-28 15:00:26   作者:佚名   我要评论 帝国cms常用函数所在位置归总,使用帝国cms的朋友可以收藏下 帝国cms常用函数所在 ...

  4. Python源码学习:Python函数浅析-函数闭包

    Python源码分析 本文环境python2.5系列 参考书籍<<Python源码剖析>> 上一篇分析了函数参数的分析后,本文分析函数闭包的实现.函数闭包即函数定义和函数表达式 ...

  5. Python源码学习:Python函数浅析-有参函数

    Python源码分析 本文环境python2.5系列 参考书籍<<Python源码剖析>> 继续上一篇无参函数的调用后,本文将分析Python中的有参函数的大致流程,在Pyth ...

  6. Python源码学习:Python函数浅析-无参函数

    Python源码分析 本文环境python2.5系列 参考书籍<<Python源码剖析>> 本文会大致分析一下Python中的函数机制.在Python中,函数是一个比较重要的类 ...

  7. C 源码学习——memcpy函数

    #include <cruntime.h> #include <string.h>#pragma function(memcpy) /* memcpy()用来拷贝src所指的内 ...

  8. ThinkPHP源码学习 data_to_xml函数 数据转成xml格式

    /**  * 数据XML编码  * @param mixed  $data 数据  * @param string $item 数字索引时的节点名称  * @param string $id   数字 ...

  9. RTKlib相对定位源码解析:zdres函数

    最近阅读RTKlib开源代码,非常感谢"塔奇克敲代码"博主的博客(RTKLIB源码解析--单点定位),他将单点定位部分整理成函数小卡片,为我理解RTKlib提供了很大的帮助.我参照 ...

最新文章

  1. Javascript类的写法
  2. python版本选择-【小白学python】之一:版本选择
  3. js模板引擎——art Template
  4. .net api 和java平台对接技术总结
  5. STM32之DAC原理
  6. java test20006_java 数组 (数组个数小于2000)
  7. 程序设计基础要用计算机吗,计算机二级公共基础知识|程序设计基础
  8. 设置本地yum源优先
  9. android textview 添加阴影效果:Paint.setShadowLayer is not supported
  10. 期刊论文格式模板 电子版_期刊论文发表流程是怎样的呢?
  11. 【南方者】【考证】【软考】【系统规划与管理师】论文万能模板
  12. 条码打印二 - 1.ZebraDesigner软件生成ZPL指令
  13. Scade Suite开发 ARINC 661 (2)Scade Suite基本操作
  14. WinForm界面开发
  15. fdisk:Linux 下管理磁盘分区的利器
  16. R语言基于with函数对指定的协变量执行双样本t检验、t.test函数对不同分组对应的协变量的均值进行Welch双样本t检验分析、双独立样本t检验
  17. Android 集成facebook 登录和分享
  18. win10怎么录屏?windows自带录屏功能怎么用
  19. 你可和差拨便去那里 视频转换软件
  20. Maven系列之使用阿里云仓库

热门文章

  1. java计算机毕业设计郑州卷烟厂库存管理系统源程序+mysql+系统+lw文档+远程调试
  2. php算球面距离,球面两点之间的距离计算
  3. 计算机三级网络技术复习资料
  4. android 毕业设计答辩ppt,别小看毕业答辩PPT,它和你的论文一样重要
  5. apereo cas开发_统一认证 - Apereo CAS 小试
  6. SAX方式实现Excel导入
  7. 利用ajax赋值,利用ajax给table赋值解决办法
  8. 清新淡雅几何简约工作汇报PPT模板-优页文档
  9. Android 程序流量监控
  10. 8入8出Modbus继电器通讯协议说明