CAPL语言也提供了一些常用的计算函数,基本上可以满足仿真工程的计算要求。此外,字符与字符串的处理一直都是编程语言常遇到的问题,这边CAPL语言也集成了一些函数给到用户,有很多函数都是借鉴了C语言中的函数。下表列举了我常用到的一些数学函数和字符串函数,以及使用用例、用例输出结果,希望对大家能有帮助。
函数 | 功能 | 用例 | 结果 |
---|---|---|---|
arccos | 计算反余弦值 | double x; x = arccos(0); | 90° |
arcsin | 计算反正弦值 | double x;x = arcsin(1); | 90° |
arctan | 计算正切值 | double x;x = arctan(1); | 0° |
_ceil | 求出不小于的最小整数 | float x;x = _ceil(3.6); | 4 |
_floor | 求出不大于的最大整数 | float x;x = _floor(3.6); | 3 |
_Log | 取自然对数函数 | double x;x = _log(1.0); | 0 |
_Log10 | 取以10为底的对数函数 | double x;x = _log10(100.0); | 2 |
_max | 取两个数值中的最大值 | float result;result = _max(1.0, _max(-3.0, 5.2)); | 5.2 |
_min | 取两个数值中的最小值 | float result;result = _min(1.0, _min(-3.0, 5.2)); | -3.0 |
_pow | 计算次方 | double result;result = _pow(2.0, 3.0); | 8 |
_round | 求出最近整数 | long result;result = _round(2.4); result = _round(-3.5); | 2,-4 |
abs | 求绝对值 | long x;x = abs(15); | 15 |
cos | 求余弦值 | double x;x = cos(PI); | -1 |
exp | 求e的次方 | double x;x = exp(5); | 148.413159 |
random | 产生随机数 | dword x;x = random(100); | 随机输出0~100的整数 |
sin | 求正弦值 | double x;x = sin(PI); | 0 |
sqrt | 求开二次方值 | double x;x = sqrt(4.0); | 2 |
_atoi64 | 将字符数组转换为64位整数 | int64 i;i = _atoi64("12345678901") | 依据输出格式来定最终输出结果 |
_gcvt | 将双精度转换成指定长度的字符串 | char s[15];float val1 = 3.1415926535; _gcvt(val1, 10, s); | val1=3.141593 s=3.141592654 |
atodbl | 将字符串转换成双精度 | double d;d = atodbl(" -3.7"); d = atodbl("0x1F");d = atodbl("1.3E2"); | -3.7,31.0,130 |
atol | 将字符串转换成长整数 | long z2;z2 = atol("0xFF"); | 255 |
ltoa | 将长整数转换为不同进制数的字符串 | char s1[9];ltoa(z,s1,2); | s1= 11111111 |
snprintf | 将格式化的数据写入某哦个字符串中 | char buffer[100], str[7] = "Vector";long i;i = snprintf(buffer,elcount(buffer),"String: %s\n", str); | String: Vector |
strlen | 返回字符串长度 | long length;char buffer[100] = "CANalyzer";length = strlen(buffer); | 9 |
strncat | 在字符串结尾追加len个字符 | char s[20];strncpy(s, "Vector", 10); strncat(s, " CANoe", 11); | Vector CAN |
strcmp | 字符串长度比较操作 | char s1[7] = "Vector";char s2[7] = "Vector";strncmp(s1,s2,strlen(s1)) | 0 — 长度相等;±1 — 长度不相等 |
strncpy | 字符串复制操作 | char s1[7] = "Vector"; char s2 [32];strncpy (s2,s1,elcount(s2)); | s2 is “Vector” |
strstr | 判断字符串2是否是字符串1的子集 | long pos;char s1[18] = "Vector Informatik";char s2[11] = "Informatik";pos = strstr(s1, s2); | pos = 7 |
strtod | 将字符串转换为浮点数 | char s[20] = "2.4E3";double number2;res = strtod(s, number2);write("number2: %g", number2); | number: 2400 |
strtol | 将字符串转换为32位整数 | char s[20] = "0xFF";long number1; res = strtol(s, number1);write("number1: %d, ", number1; | number1: 255 |
strtoll | 将字符串转换为64位整数 | char s[20] = "0xFF";long number1; res = strtol(s, number1);write("number1: %d, ", number1; | number1: 255 |
strtoul | 将字符串转换为无符号32位整数 | char s[20] = "0xFF";long number1; res = strtol(s, number1);write("number1: %d, ", number1; | number1: 255 |
strtoull | 将字符串转换为无符号64位整数 | char s[20] = "0xFF";long number1; res = strtol(s, number1);write("number1: %d, ", number1; | number1: 255 |
substr_cpy | 复制源字符串中子字符串给目标字符串 | char s1[7];char s2[18] = "Vector Informatik";substr_cpy(s1, s2, 0, 6, elcount(s1)); | s1: Vector |
str_match_regex | 检查字符串是否与正则表达式模式完全匹配 | char buffer[70] = "Vector Informatik";long res;res = str_match_regex(buffer, "Vector [A-Za-z]*"); | res = 1(匹配) |
str_replace | 字符串替换操作 | char buffer[70] = "Vector Informatik";str_replace(buffer, "Informatik", "CANoe");write(buffer); | Vector CANoe |
strstr_regex | 字符串中搜索正则表达式模式。 | char buffer[70] = "Vector Informatik";long res;res = strstr_regex(buffer, "Inf[a-z]*"); | res = 7 (Inf的起始位) |
toLower | 字符(串)小写 | char buffer[20];toLower(buffer, "Vector", elcount(buffer)); | vector |
toUpper | 字符(串)大写 | char buffer[20];toUpper(buffer, "Vector", elcount(buffer)); | VETOR |