求DQUSVR4数据结构的完全自由格式版本及12I 0格式说明
问题说明
我不清楚以下固定格式RPGLE数据结构的完全自由格式版本应该是什么样的:
DQUSVR4 DS D QUSLVR00 1 4I 0 D QUSCK 5 8I 0 D QUSLD 9 12I 0
我了解老式的5I 0、10I 0等整数规范,也查阅过IBM官方参考。看到IBM的一份参考指出,在输入规范中4I等同于四字节整数(10I),8I等同于八字节整数(20I),但12I 0的含义让我困惑。
补充背景:该数据结构位于QSYSINC/QRPGLESRC文件的QUS源成员中,用于处理用户空间。希望能得到这些规范的相关说明。
解答
自由格式等价实现
对应的自由格式RPGLE数据结构代码如下:
dcl-ds QUSVR4 qualified; QUSLVR00 int(10); // 4字节有符号二进制整数 QUSCK int(20); // 8字节有符号二进制整数 QUSLD packed(12:0); // 12位0小数的压缩十进制数 end-ds;
格式规范细节说明
4I 0:固定格式中代表4字节有符号二进制整数,自由格式用int(10)对应(10位十进制是4字节二进制能容纳的最大有符号范围)。8I 0:代表8字节有符号二进制整数,自由格式对应int(20)。12I 0:这里的I容易和二进制整数的标识混淆,实际是老式RPG中对无小数压缩十进制数的写法。12指总位数,0指小数位,等价于12P 0,自由格式用packed(12:0)声明。
这个数据结构属于QSYSINC中用户空间API的定义,QUSLD字段存储用户空间的总长度,采用压缩十进制是早期IBM i API的常见设计。
内容的提问来源于stack exchange,提问作者theMountinman
相关产品推荐
相关产品推荐

