Rpgle双字节问题

时间:2018-03-07 09:40:30

标签: 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)  
W_CHANO           Packed(6,0)  

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

如何获得我想要的结果? 干杯, Jemrug

1 个答案:

答案 0 :(得分:5)

操作码EVALR不像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数据时,必须记住这一点并转换常量,并且只使用明确定义为UCS2的字段或子字段。否则将进行转换。