在脚本开发过程中,特别是相较于底层语言C/CAPL来说,一般字符串都是以ASCII码来识别,这样我们会遇到的问题就是大小写未统一的情况下无法进行字符串识别,导致测试脚本出现bug后很难查找到bug问题所在,因此我们需要对于字符串进行修改为大写或者小写的修改,这样对于字符串的输出可以进行模糊的匹配,极大的方便使用;另外就是字符串的编码问题,虽然CAPL支持的编码格式不多,但是并不能保证我们工作中不会遇到,因此对于编码的处理vector也提供了部分编码转换的函数供我们使用,依然也在今天的文章中;最后就是字符串的长度,这对于我们处理字符串中的复制、拼接等有不可替代的作用,大家也可以关注下。

字符串编码格式转换

ConvertString

功能:将字符串从一种编码格式转换为另外一种编码格式

说明:将字符串从一种编码转换为另一种编码。转换字符串的长度取决于请求的编码。输出字节数组中使用的字节数被写入encodeSize。如果输出数组maxOutputSize的大小不足以容纳转换后的字符串和终止的“\0”,则函数返回错误,输出内容未定义。无法在请求的编码中表示的字符将替换为Windows函数WideCharToMultiByte选择的最佳匹配字符。

output:目标字节数组

encodedSize:ConvertString将输出中使用的字节数(包括终止的“\0”)写入此参数。

maxOutputSize:输出最大数组的大小

outputCodepage:输出编码格式,包括:

  • CP_UTF8

  • CP_UTF16

  • CP_LATIN1

  • CP_SHIFT_JIS

input:编码代码页中的输入字符串,没有BOM。

inputSize:输入字符串数组的大小

inputCodepage:输入编码格式,包括:

  • CP_UTF8

  • CP_UTF16

  • CP_LATIN1

  • CP_SHIFT_JIS

返回值:

0:编码转换成功,字节数组输出和结果长度encodedSize有效。

-1:非法字符(例如非法UTF8码点)。

-2:缓冲区空间不足,输出数组太小。

-3:内部错误。

代码示例

//将系统变量字符串值(例如从面板输入)转换为UTF-16,反之亦然
includes
{#include "Encoding.cin"
}// 处理字符串的输入,例如从面板输入
on sysvar TestVars::StringSV
{byte data[100]; long nrOfBytes; byte data2[200]; long res;// 获取UTF-8格式的字符串sysGetVariableData(sysvar::TestVars::StringSV, data, nrOfBytes);// 将其转换为UTF-16res = ConvertString(data2, nrOfBytes, elcount(data2), CP_UTF16, data, nrOfBytes, CP_UTF8);//现在使用UTF-16字节,例如通过网络发送//这里使用data类型的系统变量进行模拟sysSetVariableData(sysvar::TestVars::DataVar, data2, nrOfBytes);}//例如从网络接收UTF-16数据  //这里使用data类型的系统变量进行模拟on sysvar TestVars::DataVar{byte data[200]; long nrOfBytes; byte data2[100]; long res;sysGetVariableData(sysvar::TestVars::DataVar, data, nrOfBytes);// data是UTF-16中的字符串;将其转换为UTF-8res = ConvertString(data2, nrOfBytes, elcount(bytes), CP_UTF8, data, nrOfBytes, CP_UTF16);//将字符串复制到string类型的系统变量中,例如在面板中显示sysSetVariableData(sysvar::TestVars::OutStringVar, data2, nrOfBytes);
}

DecodeString

功能:解码从编码代码页输入的字节数组。

说明:将从编码代码页输入的字节数组解码为当前CAPL字符串编码。

解码字符串的长度取决于给定的编码。如果输出数组outputSize的大小不足以容纳解码的字符串和终止的“\0”,则函数将返回错误,并且输出的内容未定义。当前编码中无法表示的字符将替换为Windows函数WideCharToMultiByte选择的最佳匹配字符。

output:目标字节数组

outputSize:输出数组大小

input:编码代码页中的输入字符串,没有BOM。

Codepage:编码格式,包括:

  • CP_UTF8

  • CP_UTF16

  • CP_LATIN1

  • CP_SHIFT_JIS

返回值:

0:成功,字节数组输出有效。

-1:非法字符(例如非法UTF8码点)。

-2: 缓冲区空间不足,输出数组太小。

-3:内部错误。

代码示例

includes
{#include "Encoding.cin"
}{int result;char text[10];byte stream[6] = {0xC3, 0xA4, 0xC3, 0xB6, 0xC3, 0xBC};result = DecodeString(text, 10, stream, 6, CP_UTF8);// 在德语面板上,文本现在是{‘ä’, ‘ö’, ‘ü’, 0}if (result == 0) {write(text);// 输出(在德语窗口上):äöü}
}

EncodeString

功能:使用编码代码页对字符串输入进行编码。

说明:使用编码代码页对字符串输入进行编码;

编码字符串的长度和终止“\0”取决于请求的编码。输出字节数组中使用的字节数被写入encodeSize。如果输出数组maxOutputSize的大小不足以容纳编码字符串和“\0”,则函数返回错误,输出数组的内容未定义。

无法在请求的编码中表示的字符将替换为Windows函数WideCharToMultiByte选择的最佳匹配字符。

注意:CAPL字符串编码通常与源文件的编码匹配。使用CAPL浏览器创建文件时,它将以与计算机语言设置匹配的编码保存文件,并在文件开头的特殊注释中写入编码。如果源文件以UTF-16编码,或者如果包含文件的编码与源文件不同,则CAPL字符串编码将为UTF-8。

output:目标字节数组

encodedSize:输出数组大小

maxOutputSize:数组输出的最大值

input:编码代码页中的输入字符串,没有BOM。

codepage:编码格式,包括:

  • CP_UTF8

  • CP_UTF16

  • CP_LATIN1

  • CP_SHIFT_JIS

返回值:

0:成功,字节数组输出和结果长度encodedSize有效。

-1:非法字符(例如非法UTF8码点)。

-2: 缓冲区空间不足,输出数组太小。

-3:内部错误。

代码示例

includes
{#include "Encoding.cin"
}{int result;char text[4] = "äöü";byte stream[10];long len;result = EncodeString(stream, len, 10, text, CP_UTF8);// 在德语面板上,len现在是7,stream现在是{0xC3,0xA4,0xC3,0xB6,0xC3、0xBC,0};if (result == 0) {...}
}

字符串大小写的转换

toLower

功能:将字符或者字符串转换为小写;支持将字符或字符串中包含A - Z转换为a - z.

c:待转换的字符

source:待转换的字符串

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

bufferSize:dest数组的大小

代码示例

char buffer[20];
toLower(buffer, "Vector", elcount(buffer));
write("buffer is : %s", buffer);
//输出结果
// buffer is :"vector"

toUpper

功能:将字符或者字符串转换为大写;支持将字符或字符串中包含a - z转换为A - Z

c:待转换的字符

source:待转换的字符串

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

bufferSize:dest数组的大小

代码示例

char buffer[20];
toUpper(buffer, "Vector", elcount(buffer));
write("buffer is : %s", buffer);
//输出结果
// buffer is :"VECTOR"

获取字符串长度

mbstrlen

功能:返回字符串的长度(以字符为单位)。

s:待计算长度的字符串

返回值:字符串s的长度

代码示例

long length;
char s1[10] = "door";
char s2[10] = "Tür";
write("%d %d", mbstrlen(s1), strlen(s1));
write("%d %d", mbstrlen(s2), strlen(s2));
//输出结果
// 4 4
// 3 [3 or 4取决于字符串的编码格式]

strlen

功能:获取字符串的长度(以字节为单位)。

说明:根据字符串编码,字符可能需要几个字节,例如Windows ANSI(932)编码中的日语字符或UTF-8编码中的任何特殊字符。在这种情况下,使用mbstrlen函数更合适。

s:待计算长度的字符串

返回值:字符串s的长度

代码示例

long length;
char buffer[100] = "CANalyzer";
length = strlen(buffer);
write("length is %s", length);
//输出结果
length is 9

Vector - CAPL - 字符串函数杂项相关推荐

  1. 3.vector实现字符串类

    3.vector实现字符串类 本章前言: 身为土生土长的中国程序员,你肯定要用unicode来编写程序.但是由wchar_t数组实现的字符串准确点说应该叫字符数组,但它在使用时比较繁琐,而且容易出现数 ...

  2. c语言初始化字符串 函数 manment,[转载]3.09进程(C语言班最后一天的课程)

    1,进程:是容器,是内存上的概念.线程是CPU的概念. 2,fork的作用是根据一个现有的进程复制出一个新进程,原来的进程称为父进程(Parents Process),新进程称为子进程(Child P ...

  3. java vector reverse,倒置函数reverse的用法

    倒置字符串函数reverse:用于倒置字符串s中的各个字符的位置,如原来字符串中如果初始值为123456,则通过reverse函数可将其倒置为654321,程序如下: #include #includ ...

  4. MySQL 学习笔记(3)— 字符串函数、数值函数、日期时间函数、流程函数、聚集函数以及分组数据

    1. 字符串函数 MySQL 的常用函数包括字符串函数.数值函数.日期时间函数.流程函数等. SELECT ascii("abc"),char(97),concat("h ...

  5. c语言中存储字符用什么函数,那些C语言中你不知道的字符串函数(坑)

    1.strcpy() 在字符串拷贝函数中,它的函数编写不难,如下 char* Strcpy(char* dest, const char* src) { assert(dest != NULL &am ...

  6. c int转字符串_【C++实现python字符串函数库】字符串匹配函数startswith与endswith

    [C++实现python字符串函数库]字符串匹配函数startswith与endswith 这两个函数用于匹配字符串的开头或末尾,判断是否包含另一个字符串,它们返回bool值.startswith() ...

  7. 模拟实现常用字符串函数

    1.查找子字符串函数strstr的实现char * my_strstr(const char * dest, const char * src)//const保护字符串不被更改 {assert(des ...

  8. PHP替换字符串函数strtr()和str_replace()

    strtr(string,from,to): 逐个字符开始替换,以from跟to中长度较较短的一个为准,例如: strtr("aidenliu","ai",&q ...

  9. [SqlServer]数据库中自定义拆分字符串函数Split()

     经常我们要用到批量操作时都会用到字符串的拆分,郁闷的是SQL Server中却没有自带Split函数,所以我们只能自己动手来解决一下.为了减少和数据库的通讯次数,我们都会利用这种方法来实现批量操作. ...

最新文章

  1. 设计模式在外卖营销业务中的实践
  2. php7 thinkphp5,thinkphp5+phpstudy+php7.0连接SQL Server 2008 | 睿客网
  3. Android上webview界面切换动画效果
  4. Apache Kafka源码剖析:第5篇 业务API处理
  5. php去掉内部空格_php中去掉头尾空格3种方法
  6. 做项目开发你必须得掌握的知识:设计模式
  7. oracle创建包 和调用,oracle创建函数和调用存储过程和调用函数的例子(区别)...
  8. php正则判断字符串是否含有中文
  9. CSS3伪元素、伪类选择器
  10. java inject例子_java – 手动实例化@InjectMock带注释的字段
  11. Struts2国际化——完整实例代码
  12. ubuntu20.x安装 podman
  13. 005-统一沟通-部署-基础-环境作业
  14. thinkpadx1mdt 网络启动_二二、MDT 2013 Update 1批量部署-硬件驱动使用、驱动库建立及自动识别...
  15. 模式识别学习笔记——1(线性分类器)
  16. C# 红色警戒2无限金钱+电力负载 外挂源码示例
  17. 前端人员的服务端实用学习建议
  18. sublime插件之sidebar
  19. 国内SSD品牌如何异军突起
  20. 学习记录 第01章 数据能做什么

热门文章

  1. 关于 SAP UI5 Container 控件 aggregation 的深入分析试读版
  2. R语言与数据分析(7)-R包的使用
  3. 乌班图ubuntu-桌面假死鼠标点击无反应
  4. 第7.11节 案例详解:Python类实例变量
  5. 《ZigBee Wireless Networking》学习笔记【2】
  6. 亚马逊asin关键词排名追踪_亚马逊站外推广黑科技之快速提升关键词排名
  7. layui扩展第三方字体(详细)
  8. 计算机中考在线评分模拟卡,TOP30广西南宁市2016届中考权威预测模拟数学试卷一解析版.doc文档免费在线阅读(模版2)...
  9. CAM350 Align叠层 | NOT UNDO-able! Align layer: 1 to base pt:
  10. QT软件开发之基础控件--2.5.3 QLCDNumber 数码管控件