欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > CAPL_学习笔记(Itoa/_atoi64)

CAPL_学习笔记(Itoa/_atoi64)

2025/3/10 5:53:07 来源:https://blog.csdn.net/WE_BIG/article/details/139619943  浏览:    关键词:CAPL_学习笔记(Itoa/_atoi64)

(1)ltoa函数

(1)先思考问题

Itoal是将“长整数转换为不同进制数的字符串”,先看描述,提取出几个关键词,

1:“长整数是被转换的参数”

2:被转换为字符串,那么我们猜测字符串,应该先定义个字符数组,然后再把转换所得的值放进去

3:转换为不同的进制,是不是也需要一个参数说明?参数具体哪个位置下面介绍

(2)官方文档

2.1函数原型和形参定义

第一行中 1 标注处 可以知道该函数,是没有返回值的,包含了三个参数,看6处,详细标注了,每个参数的含义

**1)val  需要被转换的 long类型的长整数(long integer Number Need to Converted),

**2)s  表示长整数转换成字符后,需要存放的地址,string类型变量

**3)base  表示转换进制 ,2代表bin二进制, 8代表oct,8进制。16=ox十六进制

2.2 官方文档中的实例代码

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

看输出结果

需要注意的几点

1:函数调用时,实参z的类型,需要注意;可以是变量也可以是常量。(甚至可以是符号常量,如空格),如

ltoa('  ',s1,10);也是符合的。

变量不一定只能是long类型,因为隐式转换机制(即,实参传递形参时,数据类型优先转换为形参类型),使用byte,word,dword,int arr[2](数组中的具体元素),甚至可以是ASCIL编码的字符变量或字符常量均可。

例如Itoa(‘a’,char,10),将字符‘a’ 转换为字符“97”

2:第二个参数,即转换存放地址。一定char[2]类型的字符串,不能是字符,或其他类型数组,不然会报错。

另外,需要注意定义的char字符串的长度,一定需要>=转换为字符长度+1,加1的作用是因为capl中的字符串和C中一样,字符串末尾,会自动加上/0。

3:最后是转换进制的形参,可以是变量可以是常数,(但是不管是常量还是变量),该参数只支持2进制,8进制,10进制,16进制,其他参数运行时会报错。改参数支持多种格式(10进制写法,和16进制写法均支持)

错误情况如下

/*错误使用情况说明*/
ltoa(z,s1,3); //第3个参数,进制说明错误
ltoa(z,s3,2); //第2个参数错误,不是字符形数组,直接报错
ltoa(100000000,s1,2); //数组长度不能完整的,存放转换得到的字符
ltoa(z,s1,1.5);  //进制数,表示错误

可以看出,几种错误情况,只有第二种会直接报错,,其他几种虽然编译能通过,但是程序运行会出问题。

(2)_atoi64函数

将字符转换为8Byte有符号integer,的函数。

2.1函数原型

整体来说,这个函数还是比较简单的,函数形参可以是常量字符,或字符串变量。函数返回值,即转换结果。也可以是空字符

需要注意其返回值,如果返回值为0,则说明字符转换错误。可以添加以下代码,来检测错误。

on key 'c'
{int64 i;int64 j;int64 k;char Arr1[12]="13";
i = _atoi64("a");if(i==0){write("i:TransError");}
j = _atoi64("A");if(j==0){write("j:TransError");}k = _atoi64(Arr1);if(k==0){write("k:TransError");}write("c1:i=%d",i);
write("c1:j=%d",j);
write("c1:k=%d",k);}

查看结果

结果可知:_atoi64()函数仅仅只能,将“106745”此种类型的字符,转换为int64类型的有符号整形。

另外注意"0x106745"这种类型的也是无法转换的。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词