Rpgle双字节问题

jem*_*rug 1 rpgle ibm-midrange

以下代码有问题: -

C                   eval      aaCHNO=%ucs2('0000000000')        
C**                 move      w_Chano       aaCHNO              
C                   Evalr     aaCHNO= %ucs2(%editc(w_Chano:'X'))
Run Code Online (Sandbox Code Playgroud)

定义:

AACHNO            Char(10) CCSID(1200)  
W_CHANO           Packed(6,0)  
Run Code Online (Sandbox Code Playgroud)

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

我如何得到我想要的结果?欢呼,杰姆鲁格

jma*_*phy 5

操作码EVALR不起作用MOVE,它起作用MOVE(P).为了获得您想要的行为,您将不得不使用%SUBST()或连接'0's到您的值的前面,如下所示:

C                   Evalr     aaCHNO = %ucs2('0000000000') + %ucs2(%editc(w_Chano:'X'))
Run Code Online (Sandbox Code Playgroud)

或以自由格式使用:

evalr aaCHNO = %ucs2('0000000000') + %ucs2(%editc(w_Chano:'X'));
Run Code Online (Sandbox Code Playgroud)

注意:有几个构造实际上并没有附加类型,所以它们被定义为char().字符常量就是其中之一.另一个是数据结构.在使用UCS2数据时,必须记住这一点并转换常量,并且只使用明确定义为的字段或子字段UCS2.否则将进行转换.