1

我使用了一个实用程序包 (vsmr) 来读取 VSAM 文件的值,并且我有可用的字帖源代码。

如果我有如下定义(请原谅格式)

01 RECORD
   05 RECORD-X PIC S9(3)V99 COMP-3
   05 RECORD-Y PIC S9(3)V99 COMP-3
   05 RECORD-Z PIC S9(3) COMP-3
   05 RECORD-ALPHA PIC X(10)

我在数据中有以下内容

00 20 0C 01 10 0C 01 00 0C

如何确定 RECORD-X 的数值?

我假设 RECORD-X 占用 3 个字节,值 00 20 0C 对应于 RECORD-X 的值,但我不知道如何将其转换为人类可读的值(算法上,不一定是编程上)。

我还假设值 01 10 0C 对应于 RECORD-Y 的值。我的假设正确吗?

4

1 回答 1

4

COMP-3 是二进制编码十进制 (BCD) 的实现。一个字节中的每个半字节对应一个数字,最后一个半字节保存符号。你在哪里...

00 20 0C 01 10 0C 01 00 0C

...我们可以将前三个字节映射到RECORD-X并具有 +002.00 的值。值为 C、A、F 或 E 的符号半字节在算术上被认为是正数;值为 B 或 D 的符号半字节在算术上被认为是负数。小数点没有编码在数据中,你必须有字段定义才能知道它在哪里。

IBM Enterprise COBOL 具有“首选符号”的概念,即 C 表示正,D 表示负。如果您确定您的数据都是“首选符号”,则可以利用一些优化。

您的假设RECORD-Y是正确的,其值为 +11.00。

如果您正在编写 COBOL,则不需要实现任何算法来将其转换为人类可读的值,只需MOVE RECORD-X TO RECORD-X-DISPLAY使用.RECORD-X-DISPLAYPIC +999.99

于 2016-04-29T18:09:06.767 回答