CAPL语言也提供了一些常用的计算函数,基本上可以满足仿真工程的计算要求。此外,字符与字符串的处理一直都是编程语言常遇到的问题,这边CAPL语言也集成了一些函数给到用户,有很多函数都是借鉴了C语言中的函数。下表列举了我常用到的一些数学函数和字符串函数,以及使用用例、用例输出结果,希望对大家能有帮助。

函数 功能 用例 结果
arccos 计算反余弦值 double x; x = arccos(0); 90°
arcsin 计算反正弦值 double x;x = arcsin(1); 90°
arctan 计算正切值 double x;x = arctan(1);
_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
Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐