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
。否则将进行转换。
以下代码有问题:-
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
。否则将进行转换。