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

记录部分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()

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值