Vector - CAPL - 字符串和数据之间转换

目录

字符串转换为数字

_atoi64 -- int64整数型

代码示例

stroll -- 64位整数型(strtoull -- 64位无符号整数)

stroll代码示例

strtoull代码示例

strol -- 32位整数型(strtoul -- 32位无符号整数)

strol示例函数

strtoul代码示例

atodbl -- double双精浮点型

代码示例

strtod -- double双精浮点型

代码示例

atol -- 长整型

代码示例

数字转化为字符串

_gcvt

代码示例

ltoa

示例代码


        在日常的脚本开发中,我们不可避免的会涉及到字符串和数据之间的转换,在Python中比较简单,我们可以直接使用数据转换,但是在CPAL中,所有的字符串均体现在char型数组中,那我们如何将这些数据进行转换呢?这是我们今天说的话题,字符串和数据之间的转换

Vector - CAPL - 字符串和数据之间转换_第1张图片

字符串转换为数字

_atoi64 -- int64整数型

功能:将字符串转换为64位整数

s:待转换数字的字符串

返回值:字符串转换后的数字,如果字符串无法转换为数字,则返回值为0。它是溢出时最大的正/负数字。

代码示例

int64 i;
i = _atoi64("12345678901")
write("输出字符串转换的数值:0x%x", i)
// 输出字符串转换的数值:0x2DFDC1C35

stroll -- 64位整数型(strtoull -- 64位无符号整数)

功能:将字符串转换为64位整数(strtoull,将字符串转换为32位无符号整数)

说明:

字符串类型:

      • 字符串以“0x”开头,则为十六进制
      • 字符串以“0”开头,则为八进制
      • Others,则为十进制

注意:如果字符串中前面为空格或制表符则忽略

s:被转换的字符串

result:转换为数字的结果存放

startIndex:从字符串s中startIndex位开始转换为数据

返回值:

      • -2:如果startIndex值大于字符串s的最大长度
      • -1:发生溢出。
      • Others:返回数字后第一个字符的索引

stroll代码示例

char s[20] = "123 0xFF";
int64 number1, number2;
int res;
res = strtoll(s, number1);
write("number1: %I64d, res: %d", number1, res); 
res = strtoll(s, res, number2);
write("number2: %I64d, res: %d", number2, res); 

//运行结果
// number1: 123, res: 3
// number2: 255, res: 8

strtoull代码示例

char s[20] = "123 0xFF";
int64 number1, number2;
int res;
res = strtoull(s, number1);
write("number1: %I64d, res: %d", number1, res); 
res = strtoull(s, res, number2);
write("number2: %I64d, res: %d", number2, res); 

//运行结果
// number1: 123, res: 3
// number2: 255, res: 8

strol -- 32位整数型(strtoul -- 32位无符号整数)

功能:将字符串转换为32位整数(strtoul,将字符串转换为32位无符号整数)

说明:

字符串类型:

      • 字符串以“0x”开头,则为十六进制
      • 字符串以“0”开头,则为八进制
      • Others,则为十进制

注意:如果字符串中前面为空格或制表符则忽略

s:被转换的字符串

result:转换为数字的结果存放

startIndex:从字符串s中startIndex位开始转换为数据

返回值:

      • -2:如果startIndex值大于字符串s的最大长度
      • -1:发生溢出。
      • Others:返回数字后第一个字符的索引

strol示例函数

char s[20] = "123 0xFF";
long number1, number2;
int res;
res = strtol(s, number1);
write("number1: %d, res: %d", number1, res); 
res = strtol(s, res, number2);
write("number2: %d, res: %d", number2, res); 

//输出结果
//number1: 123, res: 3
//number2: 255, res: 8

strtoul代码示例

char s[20] = "123 0xFF";
dword number1, number2;
int res;
res = strtoul(s, number1);
write("number1: %u, res: %d", number1, res); 
res = strtoul(s, res, number2);
write("number2: %u, res: %d", number2, res); 

//输出结果
// number1: 123, res: 3
// number2: 255, res: 8

atodbl -- double双精浮点型

功能:将字符串转换为数字(浮点型)

说明:该函数将字符串s转换为双数。通常,基数为十进制,必须具有以下格式:

1、[空白][符号][数字][.数字][{d|D|e|E}[符号]数字]

2、字符串解析在第一个不兼容字符处停止,如果字符串无法转换为数字,则返回0.0;

3、字符串以0x开头,则使用的基数为16,只能读入整数。

s:待转换的字符串

代码示例

double d;
d = atodbl("  -3.7");    // -3.7
d = atodbl("0x1F");      // 31.0
d = atodbl("1.3E2");     // 130.0

strtod -- double双精浮点型

功能:将字符串转换为浮点数。

说明:将字符串转换为浮点数,

      • 字符串的格式必须为[空白][符号][数字][.数字][{d | D | e | E}[符号]数字]。
      • 空白:可以由空格和制表符组成,这些字符将被忽略
      • 符号:为正(+)或负(-)
      • 数字:是一个或多个十进制数字。

如果基数字符之前没有数字,则基数字符之后必须至少出现一个数字;十进制数字后面可以跟一个指数,指数由一个介绍字母(d、d、e或e)和一个可选的有符号整数组成;如果既没有出现指数部分也没有出现基数字符,则假定基数字符跟在字符串的最后一个数字之后。

s:待转换的字符串

result:转换后的值。如果字符串无法转换为数字,则值为0。这是溢出情况下可能的最大正/负数。

startIndex:转换开始的位置(在字符串s中的位置)。

返回值:

-2:如果转换开始的位置大于字符串的长度则返回-2。

-1:发生溢出。

others:返回数字后第一个字符的索引。

代码示例

char s[20] = "-1.23 2.4E3";
double number1, number2;
int res;
res = strtod(s, number1);
write("number1: %g, res: %d", number1, res); 
res = strtod(s, res, number2);
write("number2: %g, res: %d", number2, res); 

//输出结果
// number1: -1.23, res: 5
// number2: 2400, res: 11

atol -- 长整型

功能:将字符串转换为long型数字。

说明:将字符串s转换为long型数字,默认基数为十进制;如果字符串以0x开始,使用基数16,不读取前导空格。

s:带转换的字符串

返回值:转换后的long型数字;如果字符串不是数字则返回0

代码示例

long z1;
long z2;
z1 = atol("200");
z2 = atol("0xFF");
write("打印输出数字:z1 = %d z2 = %d", z1, z2);
Result:
//输出结果
//打印输出数字:z1 = 200, z2 = 255

Vector - CAPL - 字符串和数据之间转换_第2张图片

数字转化为字符串

_gcvt

功能:将数字转换为字符串

说明:数字val被转换为包含小数点和可能的符号字节的字符串s。

val:要转换的数字(浮点型)。

digits:有效位数。

s:字符串,包含转换后的数字;如果字符串大小太小,则字符串保持不变。

代码示例

char s[15];

float val1 = 3.1415926535;
float val2 = 271828.18284;
_gcvt(val1, 10, s);
writeToLogEx("val1: %f: s: %s", val1, s);
_gcvt(val2, 9, s);
writeToLogEx("val2: %f: s: %s", val2, s);
_gcvt(val2, 5, s);
writeToLogEx("val2: %f: s: %s", val2, s);
// 字符串大小太小,字符串保持不变
_gcvt(val2, 20, s); 
writeToLogEx("val2: %f: s: %s", val2, s);

//输出结果
//val1: 3.141593: s: 3.141592654
//val2: 271828.182840: s: 271828.182
//val2: 271828.182840: s: 2.7183e+005
//val2: 271828.182840: s: 2.7183e+005

ltoa

功能:将数字转换为字符串。

说明:数字val被转换为字符串s。在这种情况下,base表示2到36之间的数字基数。s必须足够大才能接受转换后的数字!

val:待转换字符串

s:转换完成存放字符串的数组

base:进制数值

示例代码

char s1[9];
char s2[9];
ltoa(z,s1,2);
ltoa(z,s2,10);
write("z: %d s1= %s",z, s1);
write("z: %d s2= %s",z, s2);

输出结果:

z: 255 s1= 11111111
z: 255 s2= 255

你可能感兴趣的:(CAPL入门到入坑,CAPL,vTESTstudio,字符串数字转换)