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_VIN
是 CHAR() 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
明确地从数据结构的第一个字符开始,它将覆盖 vin1
、vin2
和 vin3
。定义这些 sub-fields 的顺序很重要。如果你把ucs_VIN
放在前面,vin1
、vin2
、vin3
会在结构中跟着最后,最后一个定义将覆盖在其他定义之上。
我输入的字符如下:-
"췡전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_VIN
是 CHAR() 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
明确地从数据结构的第一个字符开始,它将覆盖 vin1
、vin2
和 vin3
。定义这些 sub-fields 的顺序很重要。如果你把ucs_VIN
放在前面,vin1
、vin2
、vin3
会在结构中跟着最后,最后一个定义将覆盖在其他定义之上。