Rpgle 数据结构问题

Rpgle data struct prob

我输入的字符如下:-
"췡전V" 为 UTF16 十六进制,如 CDE1C8040056

有人请帮助我了解发生了什么:-
1) 我将我的工作CCSID更改为833


2)代码一运行如下:-

D w_VIN           ds                              
D  vin1                               like(AAF010)
D  vin2                               like(AACDE1)
D  vin3                               like(AAF006)

其中:- AAF010 是 C(10) CCSID(1200),AACDE1 是 C(1) CCSID(1200),AAF006 是 C(6)

其中 DataFld C(17) CCSID(1200) 执行的代码是:-

w_VIN  = dataFld;


评估 datafld:x

00000     CDE1C804 00560020 00200020 00200020
00010     00200020 00200020 00200020 00200020
00020     0020.... ........ ........ ........

EVAL w_VIN:x

00000     0EC2D7B8 E50FE540 40404040 40404040
00010     40404040 40404040 40404040 40404040
00020     4040.... ........ ........ ........

我期待CDE1C8040056,我真的不明白为什么,有人请解释一下吗? 我如何获得我想要的结果?
此致,
杰姆鲁格

数据结构没有明确分配给它们的数据类型。它们始终是使用作业 CCSID 的隐式固定字符字段。所以 w_VINCHAR() CCSID(833)。你对此无能为力。但是,sub-fields 可以是您想要的任何内容,并且您可以将字段相互叠加以根据需要对数据结构进行切片和切块。例如:

dcl-ds w_VIN;
  vin1          Like(aaf010);
  vin2          Like(aacde1);
  vin3          Like(aaf006);
  ucs2_VIN      Like(dataFld) Pos(1);
end-ds;

现在 w_VIN 没有像 dataFld 那样定义,所以如果您定义

就会发生转换
w_VIN = dataFld;

ucs2_VIN 的定义与 dataFld 完全相同,如果您这样做

则不会发生转换
ucs2_VIN = dataFld;

由于 ucs2_VIN 明确地从数据结构的第一个字符开始,它将覆盖 vin1vin2vin3。定义这些 sub-fields 的顺序很重要。如果你把ucs_VIN放在前面,vin1vin2vin3会在结构中跟着最后,最后一个定义将覆盖在其他定义之上。