目录
字符串转换为数字
_atoi64 -- int64整数型
代码示例
stroll -- 64位整数型(strtoull -- 64位无符号整数)
stroll代码示例
strtoull代码示例
strol -- 32位整数型(strtoul -- 32位无符号整数)
strol示例函数
strtoul代码示例
atodbl -- double双精浮点型
代码示例
strtod -- double双精浮点型
代码示例
atol -- 长整型
代码示例
数字转化为字符串
_gcvt
代码示例
ltoa
示例代码
在日常的脚本开发中,我们不可避免的会涉及到字符串和数据之间的转换,在Python中比较简单,我们可以直接使用数据转换,但是在CPAL中,所有的字符串均体现在char型数组中,那我们如何将这些数据进行转换呢?这是我们今天说的话题,字符串和数据之间的转换
功能:将字符串转换为64位整数
s:待转换数字的字符串
返回值:字符串转换后的数字,如果字符串无法转换为数字,则返回值为0。它是溢出时最大的正/负数字。
int64 i;
i = _atoi64("12345678901")
write("输出字符串转换的数值:0x%x", i)
// 输出字符串转换的数值:0x2DFDC1C35
功能:将字符串转换为64位整数(strtoull,将字符串转换为32位无符号整数)
说明:
字符串类型:
注意:如果字符串中前面为空格或制表符则忽略
s:被转换的字符串
result:转换为数字的结果存放
startIndex:从字符串s中startIndex位开始转换为数据
返回值:
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
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
功能:将字符串转换为32位整数(strtoul,将字符串转换为32位无符号整数)
说明:
字符串类型:
注意:如果字符串中前面为空格或制表符则忽略
s:被转换的字符串
result:转换为数字的结果存放
startIndex:从字符串s中startIndex位开始转换为数据
返回值:
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
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
功能:将字符串转换为数字(浮点型)
说明:该函数将字符串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
功能:将字符串转换为浮点数。
说明:将字符串转换为浮点数,
如果基数字符之前没有数字,则基数字符之后必须至少出现一个数字;十进制数字后面可以跟一个指数,指数由一个介绍字母(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
功能:将字符串转换为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
功能:将数字转换为字符串
说明:数字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
功能:将数字转换为字符串。
说明:数字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