广告
返回顶部
首页 > 资讯 > 精选 >SAP ABAP字符变量和字符串变量怎么理解
  • 473
分享到

SAP ABAP字符变量和字符串变量怎么理解

2023-06-03 17:06:16 473人浏览 独家记忆
摘要

本篇内容主要讲解“SAP ABAP字符变量和字符串变量怎么理解”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SAP ABAP字符变量和字符串变量怎么理解”吧!使用ABAP strlen函数计算下

本篇内容主要讲解“SAP ABAP字符变量和字符串变量怎么理解”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SAP ABAP字符变量和字符串变量怎么理解”吧!

使用ABAP strlen函数计算下列这4个字符和字符串变量中包含的字符个数。

SAP ABAP字符变量和字符串变量怎么理解

大家先别急着滑动屏幕,先试着自己计算一下,看和标准答案是否有出入。也许大家觉得这些小的知识点没什么用,但Jerry马上会分享一个我实际处理过的客户incident,正是由于类似这种看似不起眼的小知识点没有留意,最后影响了项目进展。

正确答案,依次是:

  • 2

  • 1

  • 19

  • 17

逐一解释。

strlen( lv_s ) = 2

整型变量的值,整数1,赋给字符串变量lv_s, 这里发生一个隐式类型转换。

SAP帮助文档里声明,整型变量赋给字符串变量时,如果整数为负数,则字符串变量末尾为"-";如果整数为正数,则字符串变量末尾为空白字符。换言之,当整型变量到字符串变量的隐式类型转换发生时,字符串变量末尾会多出一位,代表赋值源头的整型数的符号位。

SAP ABAP字符变量和字符串变量怎么理解

lv_s多出来的这个空白字符在调试器里看得很清楚,2000正是空白字符的16进制编码。同时调试器里也能看到lv_s的字符串个数为2.

SAP ABAP字符变量和字符串变量怎么理解

strlen( lv_s2 ) = 1

和前一例相比,lv_s2的复制操作没有出现隐式类型转换,而是直接被赋以了一个字符常量,故字符个数为1.

strlen( lv_ss) = 19

lv_ss的类型为SSTRING,实际就是一个CHAR20:

SAP ABAP字符变量和字符串变量怎么理解

在调试器里,lv_ss有18个前导空白(leading blank)字符,字符"1"和1个尾部空白(trailing blank)字符组成,总共20个字符,调试器里的Technical Type显示为C(20).

SAP ABAP字符变量和字符串变量怎么理解

那为什么strlen(lv_ss)不等于20,而等于19?SAP帮助文档里给出了答案——SSTRING即CHAR20这种变量,属于固定长度(fixed length)类型变量。当使用strlen函数计算这种变量的字符串个数时,尾部空白字符不应参加计数,所以要减一。

SAP ABAP字符变量和字符串变量怎么理解

strlen( lv_s3) = 17

有了例三的基础,这个就很容易了。变量lv_s3类型是CHAR18,属于固定长度类型变量,因此strlen计算出的字符串个数为18 - 1 = 17.

第一个例子中,我们把一个整数直接赋给了一个字符串变量,发生了隐式类型转换。在实际项目中,这种隐式类型转换很容易出现在函数或者ABAP类方法的参数传递中。对于函数或ABAP类方法的形式参数,如果我们传递的实际参数类型和其类型不匹配,就会发生隐式类型转换,这种自动转换有时并非我们期望发生的,甚至容易被忽略。

看一个真实的例子。我曾经担任过一个俄罗斯的SAP CRM客户项目的Dev Angel,收到过一个性能相关的incident,客户打开某个UI的速度极其缓慢,甚至经常超时。

我通过调试,最终发现罪魁祸首位于下段代码。该代码从SAP CRM发起RFC调用,去SAP ERP读取数据,Max Hit设置为15,意思是期望ERP端至多返回15条记录。

SAP ABAP字符变量和字符串变量怎么理解

然而从ERP端返回了总共408093条记录。显然,虽然通过硬编码指定Max Hit为15,却完全没有起到限制作用。

SAP ABAP字符变量和字符串变量怎么理解

起初我想当然地认为这是ERP函数的bug,没有正确处理CRM调用端传递过来的Max Hit. 然而当我在调试器里单步执行到CRM函数内部查看iv_max_entries时,一下傻了眼:

SAP ABAP字符变量和字符串变量怎么理解

它的值从15一下变成了3473457. 这个数字是什么鬼?!

再看函数的形式参数定义,iv_max_entries类型为整型,而二次开发顾问传入的硬编码值'15', 是一个字符值,我顿时恍然大悟。

SAP ABAP字符变量和字符串变量怎么理解

'15'是怎么变成魔幻数字3473457的?

Jerry先不解释,而是请大家看下面这段代码:

SAP ABAP字符变量和字符串变量怎么理解

执行,正好输出3473457这个魔幻数字。那么代码第四行31003500是哪里来的?其实就是字符串'15'的十六进制编码。

SAP ABAP字符变量和字符串变量怎么理解

也就是说,二次开发顾问在RFC调用时,将硬编码的'15'传给了接受整型变量的函数参数IV_MAX_ENTRIES. 应该该参数类型为整型,所以'15'的十六进制编码'31003500'被自动转换成了对应的整型数3473457. 显然这不是开发顾问期望的行为,但因为程序能够继续运行,所以这个问题暂时被掩盖了。

而RFC调用完成之后,紧接着是一个嵌套的LOOP. 在Max Hit能按照期望工作的前提下,对于最多包含15条记录的内表,就算进行嵌套的LOOP操作也能很快完成。但如今因为Max Hit不工作,内表记录从最多15条一下子变成了超过40万条,在这么庞大规模的内表上进行嵌套LOOP操作,性能可想而知。

到此,相信大家对“SAP ABAP字符变量和字符串变量怎么理解”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: SAP ABAP字符变量和字符串变量怎么理解

本文链接: https://www.lsjlt.com/news/235256.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • SAP ABAP字符变量和字符串变量怎么理解
    本篇内容主要讲解“SAP ABAP字符变量和字符串变量怎么理解”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SAP ABAP字符变量和字符串变量怎么理解”吧!使用ABAP strlen函数计算下...
    99+
    2023-06-03
  • Python变量和字符串详解
    几个月前,我开始学习个人形象管理,从发型、妆容、服饰到仪表仪态,都开始做全新改造,在塑造个人风格时,最基础的是先了解自己属于哪种风格,然后找到参考对象去模仿,可以是自己欣赏的人、明星或模特等,直至最后去创新...
    99+
    2022-06-04
    字符串 变量 详解
  • python变量和字符串(笔记)
    1、变量名就像我们现实社会的名字,把一个值赋值给一个名字时,它会存储在内存中,称之为变量,大多数语言中,都把这种行为成为“给变量赋值”或“把值存储在变量中”。2、不过python与大多数其他计算机语言的做法稍有不同,它并不是把值存储在变量中...
    99+
    2023-01-31
    字符串 变量 笔记
  • c++字符串变量怎么赋值
    在C++中,可以使用等号(=)将一个字符串赋值给一个字符串变量。具体语法如下: std::string str; // 声明一个字符...
    99+
    2023-10-27
    c++
  • php怎么声明字符串变量
    这篇“php怎么声明字符串变量”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“php怎么声明字符串变量”文章吧。php声明字符...
    99+
    2023-06-29
  • C++变量,常量,数组和字符串详解
    目录一、内存和寻址概述二、变量1.声明变量2.变量的作用域2.1局部变量2.2全局变量3.c++变量类型3.1、bool布尔类型3.2char字符型4.常量总结一、内存和寻址概述 可...
    99+
    2022-11-12
  • C语言的变量与常量 字符字符串与转义字符详解
    目录一.变量1.1定义变量的方法1.2变量的分类1.3变量的使用二.常量2.1字面常量 2.2 const修饰的常变量 2.3#define定义的标识符常量2.4...
    99+
    2022-11-12
  • Python高级变量之字典和字符串详解
    目录1、字典的定义字典和列表的区别:字典的基本使用2、循环遍历3、字符串的定义4、字符串的常用操作字符串 查找和替换字符串 文本对齐演练去除空白字符字符串拆分和连接5、字符串的切片总...
    99+
    2022-11-12
  • json字符串怎么转为php变量
    本教程操作环境:windows7系统、PHP7.1版、DELL G3电脑在php中,可以利用json_decode()函数来将json字符串转换为PHP变量。json_decode()函数可以 对 JSON 格式的字符串进行解码。语法:js...
    99+
    2018-02-07
    json字符串 php变量
  • 怎么在php中创建字符串变量
    怎么在php中创建字符串变量?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。PHP开发环境搭建工具有哪些一、phpStudy,是一个新手入门最常用的开发环境。二、...
    99+
    2023-06-14
  • Python高级变量的字典和字符串怎么使用
    这篇文章主要讲解了“Python高级变量的字典和字符串怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python高级变量的字典和字符串怎么使用”吧!1、字典的定义dictionary...
    99+
    2023-06-22
  • 深入解析Go 变量字符串与字符编码问题
    目录字符串Unicode UTF8常⽤字符串函数字符串就是一串固定长度的字符连接起来的字符序列(很多字符拼接在一起的)。 Go的字符串是由单个字节连接起来的。Go语言的字符串的字节使...
    99+
    2022-11-13
  • php字符串变量如何替换
    这篇“php字符串变量如何替换”文章,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要参考一下,对于“php字符串变量如何替换”,小编整理了以下知识点,请大家跟着小编的步伐一步一步的慢慢理解,接下来就让我们进入主题吧。...
    99+
    2023-06-06
  • golang怎么检测变量是否为字符串
    检测变量是否为字符串的方法:1、利用“%T”格式化标识,语法“fmt.Printf("variable count=%v is of type %T \n", count, count)”;2、利用reflect.Typ...
    99+
    2023-05-14
    字符串 go语言 Golang
  • Python 变量教程字节对象与字符串
    目录前言编码解码前言 在 Python 2 中,str 和 bytes 都是相同的 typeByte 对象,而在 Python 3 中,Byte 对象在 Python 3 中定义为&...
    99+
    2022-11-11
  • php声明字符串变量有几种
    在 PHP 中,声明字符串变量有三种方式:使用单引号,使用双引号,以及使用 heredoc 和 nowdoc。单引号:单引号字符串中的变量不会被解析,所有特殊字符(如换行符和引号)都需要使用转义符号“\”。$name = 'John...
    99+
    2023-05-14
  • java判断变量是否是字符串
    instanceof 严格来说是Java中的一个双目运算符,用来测试一个对象是否为一个类的实例,用法为: (推荐学习:java课程)boolean result = obj instanceof Class其中 obj 为一个对...
    99+
    2015-07-05
    java入门 java
  • PHP字符串中引用变量问题
    php中字符串引用变量主要是数据库操作字符串的不同1,普通字符串引用变量    a.外层必须引用双引号    b.字符串中的变...
    99+
    2022-10-18
  • Python文件类型,变量及字符串
    1. 文件类型:(1)源代码:    vim test.py    #!/usr/bin/python    print 'hello world!'运行方法1:    [root@localhost python]# python tes...
    99+
    2023-01-31
    字符串 变量 文件类型
  • json字符串如何转为php变量
    这篇文章主要为大家展示了“json字符串如何转为php变量”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“json字符串如何转为php变量”这篇文章吧。在php中,可以利用json_decode(...
    99+
    2023-06-25
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作