Ibm midrange RPG/RPGLE-包含有符号和压缩值的数据结构的行为:
。。。更新一些旧代码时,遇到了包含签名和压缩值的数据结构的有趣行为:Ibm midrange RPG/RPGLE-包含有符号和压缩值的数据结构的行为:,ibm-midrange,rpgle,Ibm Midrange,Rpgle,。。。更新一些旧代码时,遇到了包含签名和压缩值的数据结构的有趣行为: D #SIGNED S 5S 0 INZ D #PACKED S 5P 0 INZ D*--- D #AS_1
D #SIGNED S 5S 0 INZ
D #PACKED S 5P 0 INZ
D*---
D #AS_1 DS
D #AS1 LIKE(#SIGNED) INZ
D #AS2 LIKE(#SIGNED) INZ
D #AS3 LIKE(#SIGNED) INZ
D #AP_1 DS
D #AP1 LIKE(#PACKED) INZ
D #AP2 LIKE(#PACKED) INZ
D #AP3 LIKE(#PACKED) INZ
C
C* for single signed, this is true
C #AS1 IFEQ *ZEROS
C EXSR MYSR
C ENDIF
C
C* for single packed, this is true
C #AP1 IFEQ *ZEROS
C EXSR MYSR
C ENDIF
C* for DS of signed, this is true
C #AS_1 IFEQ *ZEROS
C EXSR MYSR
C ENDIF
C
C* however for DS of packed, this is false
C #AP_1 IFEQ *ZEROS
C EXSR MYSR
C ENDIF
C
C Eval *INLR = *ON
C Return
*****************************************************************
C MYSR BEGSR
C ENDSR
我想这是因为包装是如何在内部存储的…这是多种因素的组合 DS只是字节的集合,因为RPG没有字节类型,所以它基本上将其视为SBCS字符的集合 *零是一个符号名,它转换为一个重复的x‘F0’,表示比较/分配给变量的长度 字符“0”是x“F0”,分区十进制数字0也是“F0” 单个数字压缩0是x'0F' 然而,
分区(5,0)是x'f0f0'
包装(5,0)为x'00000 F' 因此,将_1视为char(15)x'f0f0f0f0'
AP_1被视为字符(9)x'00000 F00000F'
所以很容易看出,作为_1==*零,但作为_1*零它是事物的组合 DS只是字节的集合,因为RPG没有字节类型,所以它基本上将其视为SBCS字符的集合 *零是一个符号名,它转换为一个重复的x‘F0’,表示比较/分配给变量的长度 字符“0”是x“F0”,分区十进制数字0也是“F0” 单个数字压缩0是x'0F' 然而,
分区(5,0)是x'f0f0'
包装(5,0)为x'00000 F' 因此,将_1视为char(15)x'f0f0f0f0'
AP_1被视为字符(9)x'00000 F00000F'
所以很容易看出,作为_1==*零,但AP_1*零请不要因为我没有使用/免费而责骂我。我只是在修改旧代码。请不要因为我没有使用/免费而责骂我。我只是在修复旧代码。字符“0”和分区的十进制数字是x'F0,而不是x'0F。一个压缩的单个数字0是x'0F'而不是x'F0。@jmarkmurphy…你不是很挑剔吗?在我用F0替换所有0F之前,一切都是正确的p字符“0”和分区十进制数字是x'F0”,而不是x'0F。单个数字压缩0是x'0F'而不是x'F0。@jmarkmurphy…你不是很挑剔吗?在我用F0替换所有0F之前,一切都是正确的P