我所投入的字符如下: -
"췡전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;
EVAL 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,我真的不明白为什么,有人请解释一下?
我如何得到我想要的结果?
问候,
Jemrug
答案 0 :(得分:2)
数据结构没有明确分配给它们的数据类型。它们始终使用Job CCSID隐式修复char字段。因此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_VIN = dataFld;
由于ucs2_VIN
显式地从数据结构的第一个字符开始,它将覆盖vin1
,vin2
和vin3
。定义这些子场的顺序很重要。如果您先放置ucs_VIN
,vin1
,vin2
和vin3
将在结构中跟随它,但由于我先定义了数据结构,然后添加了其他定义最后,最后一个定义将叠加在其他定义之上。