Rpgle 双字节问题

Rpgle Double byte issue

以下代码有问题:-

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)  

在 AACHNO 中期待:- 0000123456 但得到 'bbbb123456' 其中 b=空白 为什么?

如何获得我想要的结果? 干杯, 杰姆鲁格

op-codeEVALR不像MOVE那样工作,它像MOVE(P)那样工作。为了获得您想要的行为,您将不得不使用 %SUBST() 或将 '0's 连接到您的值的前面,如下所示:

C                   Evalr     aaCHNO = %ucs2('0000000000') + %ucs2(%editc(w_Chano:'X'))

或自由格式使用:

evalr aaCHNO = %ucs2('0000000000') + %ucs2(%editc(w_Chano:'X'));

注意: 有几个构造实际上并未附加类型,因此它们被定义为 char()。字符常量就是其中之一。另一个是数据结构。当你使用 UCS2 数据时,你必须记住这一点并转换常量,并且只使用字段或 sub-fields 明确定义为 UCS2。否则将进行转换。