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。