Ibm midrange Rpgle数据结构问题

Ibm midrange Rpgle数据结构问题,ibm-midrange,rpgle,Ibm Midrange,Rpgle,我所填写的表格如下: "췡전V“为UTF16十六进制,与CDE1C8040056相同 请有人帮助我了解发生了什么:- 1) 我把我的工作CCSID改为833 2)我运行的代码如下:- D w_VIN ds D vin1 like(AAF010) D vin2 like(AACDE1) D vi

我所填写的表格如下:
"췡전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;

评估数据FLD:x

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

评估车辆识别号:x

00000     0EC2D7B8 E50FE540 40404040 40404040
00010     40404040 40404040 40404040 40404040
00020     4040.... ........ ........ ........
我期待CDE1C8040056,我真的不明白为什么,请有人解释一下? 我怎样才能得到我想要的结果?
问候,

Jemrug

数据结构没有明确指定给它们的数据类型。它们始终是使用作业CCSID隐式固定的字符字段。因此
w_VIN
CHAR()CCSID(833)
。对此你无能为力。但是,子字段可以是您想要的任何内容,并且您可以将字段彼此重叠,以按照您的意愿对数据结构进行切片和切分。例如:

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\u VIN
的定义与
dataFld
完全相同,如果您这样做,则不会发生转换

w_VIN = dataFld;
ucs2_VIN = dataFld;

由于
ucs2\u VIN
明确地从数据结构的第一个字符开始,它将覆盖
vin1
vin2
vin3
。定义这些子字段的顺序很重要。如果将
ucs\u VIN
放在第一位,
vin1
vin2
vin3
将在结构中紧跟其后,但由于我首先定义了数据结构,然后在最后添加了一个附加定义,最后一个定义将覆盖在其他定义之上。

那么我如何确保正确的值最终出现在vin1、vin2和vin3中?是使用%subst(数据FLD,1,10)ETC移动数据FLD w_vin的唯一方法;谁知道这有点疯狂……非常感谢你让我明白。你现在已经打开了我的眼睛。