Ibm midrange Rpgle双字节问题
以下代码位存在问题:-Ibm midrange Rpgle双字节问题,ibm-midrange,rpgle,Ibm Midrange,Rpgle,以下代码位存在问题:- C eval aaCHNO=%ucs2('0000000000') C** move w_Chano aaCHNO C Evalr aaCHNO= %ucs2(%editc(w_Chano:'X')) 定义: AACHNO Char(10) CCSID(1200)
C eval aaCHNO=%ucs2('0000000000')
C** move w_Chano aaCHNO
C Evalr aaCHNO= %ucs2(%editc(w_Chano:'X'))
定义:
AACHNO Char(10) CCSID(1200)
W_CHANO Packed(6,0)
在阿奇诺,我们期望:-0000123456,但得到'bbbb123456',其中b=空白为什么
我如何得到我想要的结果?
干杯
Jemrug操作代码EVALR的工作原理与MOVE不同,它的工作原理与MOVEP类似。为了获得所需的行为,必须使用%SUBST或将“0”连接到值的前面,如下所示:
C Evalr aaCHNO = %ucs2('0000000000') + %ucs2(%editc(w_Chano:'X'))
或以自由格式使用:
evalr aaCHNO = %ucs2('0000000000') + %ucs2(%editc(w_Chano:'X'));
注意:有几个构造实际上并没有附加类型,所以它们被定义为char。字符常量就是其中之一。另一个是数据结构。使用UCS2数据时,必须记住这一点并转换常量,并且仅使用显式定义为UCS2的字段或子字段。否则将进行转换。操作码EVALR的工作方式与MOVE不同,它的工作方式与MOVEP相同。为了获得所需的行为,必须使用%SUBST或将“0”连接到值的前面,如下所示:
C Evalr aaCHNO = %ucs2('0000000000') + %ucs2(%editc(w_Chano:'X'))
或以自由格式使用:
evalr aaCHNO = %ucs2('0000000000') + %ucs2(%editc(w_Chano:'X'));
注意:有几个构造实际上并没有附加类型,所以它们被定义为char。字符常量就是其中之一。另一个是数据结构。使用UCS2数据时,必须记住这一点并转换常量,并且仅使用显式定义为UCS2的字段或子字段。否则将进行转换。Mark,我认为自由格式的版本也需要EVALR。Mark,我认为自由格式的版本也需要EVALR。