1

PACKED-DECIMAL在 Big-Endian 机器上,我了解数字后面的字节形状。我无法发现的是这些字节在 Little-Endian 机器上会呈现什么形状。

注意:我认为确实存在单独格式的原因是因为 IBM MQ 编码字段具有以下值:-

  • MQENC_DECIMAL_NORMAL
  • MQENC_DECIMAL_REVERSED

MQENC_DECIMAL_REVERSED它只是说:-

压缩十进制整数的表示方式与 相同MQENC_DECIMAL_NORMAL,但字节以相反的顺序排列。每个字节中的位以与 相同的方式排列MQENC_DECIMAL_NORMAL

任何人都可以证实或反驳这种描述吗?

例如,存储在 a 中的数字 +123.45PIC 9(3)V99 COMP-3将具有以下字节:-

12 34 5C

上面的引用向我表明,如果反过来,相同的压缩十进制数将在 Little-Endian 机器上表示为:-

5C 34 12

注意我没有用 标记这个问题ibm-mq,因为我真的不认为我的问题的症结与 IBM MQ 有任何关系。这只是我问的原因。

4

1 回答 1

2

看起来打包数据以“正常”字节顺序存储。

以下程序是在联想 ThinkPad 上的 Ubuntu 16.04 上使用 OpenCOBOL 1.1.0 编译的...

   ID Division.
   Program-ID. testcmp3.
   Environment Division.
   Input-Output Section.
   File-Control.
       Select OUTPUT01 Assign To './output01'
           Status OUTPUT01-STATUS.
   Data Division.
   File Section.
   FD  OUTPUT01
       Record 16
       Block 0
       Recording F.
   01  OUTPUT01-REC PIC X(016).

   Working-Storage Section.
   01  CONSTANTS.
       05  MYNAME             PIC X(008) VALUE 'testcmp3'.

   01  WS-OUTPUT01-REC.
       05  WS-OUT-S94COMP     PIC S9(004) COMP   VALUE +0.
       05  FILLER             PIC X(001)         VALUE HIGH-VALUES.
       05  WS-OUT-S95COMP3    PIC S9(005) COMP-3 VALUE +0.
       05  FILLER             PIC X(008)         VALUE SPACES.

   01  WORK-AREAS.
       05  OUTPUT01-STATUS    PIC X(002)         VALUE ZEROES.

   Procedure Division.
   OPEN OUTPUT OUTPUT01
   IF OUTPUT01-STATUS NOT = '00'
       DISPLAY 
         MYNAME 
         ' open of OUTPUT01 status = ' 
         OUTPUT01-STATUS
   END-IF

   PERFORM 100-WRITE 100 TIMES

   CLOSE OUTPUT01
   STOP RUN.

   100-WRITE.
       WRITE OUTPUT01-REC FROM WS-OUTPUT01-REC
       ADD 1 TO WS-OUT-S94COMP
       ADD 1 TO WS-OUT-S95COMP3
       .

...选项binary-byteorder设置为native.

与程序一起显示的结果文件hexdump如下所示。

00000000  00 00 ff 00 00 0c 20 20  20 20 20 20 20 20 20 20  |......          |
00000010  01 00 ff 00 00 1c 20 20  20 20 20 20 20 20 20 20  |......          |
00000020  02 00 ff 00 00 2c 20 20  20 20 20 20 20 20 20 20  |.....,          |
00000030  03 00 ff 00 00 3c 20 20  20 20 20 20 20 20 20 20  |.....<          |
00000040  04 00 ff 00 00 4c 20 20  20 20 20 20 20 20 20 20  |.....L          |
00000050  05 00 ff 00 00 5c 20 20  20 20 20 20 20 20 20 20  |.....\          |
00000060  06 00 ff 00 00 6c 20 20  20 20 20 20 20 20 20 20  |.....l          |
00000070  07 00 ff 00 00 7c 20 20  20 20 20 20 20 20 20 20  |.....|          |
00000080  08 00 ff 00 00 8c 20 20  20 20 20 20 20 20 20 20  |......          |
00000090  09 00 ff 00 00 9c 20 20  20 20 20 20 20 20 20 20  |......          |
000000a0  0a 00 ff 00 01 0c 20 20  20 20 20 20 20 20 20 20  |......          |
000000b0  0b 00 ff 00 01 1c 20 20  20 20 20 20 20 20 20 20  |......          |
000000c0  0c 00 ff 00 01 2c 20 20  20 20 20 20 20 20 20 20  |.....,          |
000000d0  0d 00 ff 00 01 3c 20 20  20 20 20 20 20 20 20 20  |.....<          |
000000e0  0e 00 ff 00 01 4c 20 20  20 20 20 20 20 20 20 20  |.....L          |
000000f0  0f 00 ff 00 01 5c 20 20  20 20 20 20 20 20 20 20  |.....\          |
00000100  10 00 ff 00 01 6c 20 20  20 20 20 20 20 20 20 20  |.....l          |
00000110  11 00 ff 00 01 7c 20 20  20 20 20 20 20 20 20 20  |.....|          |
00000120  12 00 ff 00 01 8c 20 20  20 20 20 20 20 20 20 20  |......          |
00000130  13 00 ff 00 01 9c 20 20  20 20 20 20 20 20 20 20  |......          |
00000140  14 00 ff 00 02 0c 20 20  20 20 20 20 20 20 20 20  |......          |
00000150  15 00 ff 00 02 1c 20 20  20 20 20 20 20 20 20 20  |......          |
00000160  16 00 ff 00 02 2c 20 20  20 20 20 20 20 20 20 20  |.....,          |
00000170  17 00 ff 00 02 3c 20 20  20 20 20 20 20 20 20 20  |.....<          |
00000180  18 00 ff 00 02 4c 20 20  20 20 20 20 20 20 20 20  |.....L          |
00000190  19 00 ff 00 02 5c 20 20  20 20 20 20 20 20 20 20  |.....\          |
000001a0  1a 00 ff 00 02 6c 20 20  20 20 20 20 20 20 20 20  |.....l          |
000001b0  1b 00 ff 00 02 7c 20 20  20 20 20 20 20 20 20 20  |.....|          |
000001c0  1c 00 ff 00 02 8c 20 20  20 20 20 20 20 20 20 20  |......          |
000001d0  1d 00 ff 00 02 9c 20 20  20 20 20 20 20 20 20 20  |......          |
000001e0  1e 00 ff 00 03 0c 20 20  20 20 20 20 20 20 20 20  |......          |
000001f0  1f 00 ff 00 03 1c 20 20  20 20 20 20 20 20 20 20  |......          |
00000200  20 00 ff 00 03 2c 20 20  20 20 20 20 20 20 20 20  | ....,          |
00000210  21 00 ff 00 03 3c 20 20  20 20 20 20 20 20 20 20  |!....<          |
00000220  22 00 ff 00 03 4c 20 20  20 20 20 20 20 20 20 20  |"....L          |
00000230  23 00 ff 00 03 5c 20 20  20 20 20 20 20 20 20 20  |#....\          |
00000240  24 00 ff 00 03 6c 20 20  20 20 20 20 20 20 20 20  |$....l          |
00000250  25 00 ff 00 03 7c 20 20  20 20 20 20 20 20 20 20  |%....|          |
00000260  26 00 ff 00 03 8c 20 20  20 20 20 20 20 20 20 20  |&.....          |
00000270  27 00 ff 00 03 9c 20 20  20 20 20 20 20 20 20 20  |'.....          |
00000280  28 00 ff 00 04 0c 20 20  20 20 20 20 20 20 20 20  |(.....          |
00000290  29 00 ff 00 04 1c 20 20  20 20 20 20 20 20 20 20  |).....          |
000002a0  2a 00 ff 00 04 2c 20 20  20 20 20 20 20 20 20 20  |*....,          |
000002b0  2b 00 ff 00 04 3c 20 20  20 20 20 20 20 20 20 20  |+....<          |
000002c0  2c 00 ff 00 04 4c 20 20  20 20 20 20 20 20 20 20  |,....L          |
000002d0  2d 00 ff 00 04 5c 20 20  20 20 20 20 20 20 20 20  |-....\          |
000002e0  2e 00 ff 00 04 6c 20 20  20 20 20 20 20 20 20 20  |.....l          |
000002f0  2f 00 ff 00 04 7c 20 20  20 20 20 20 20 20 20 20  |/....|          |
00000300  30 00 ff 00 04 8c 20 20  20 20 20 20 20 20 20 20  |0.....          |
00000310  31 00 ff 00 04 9c 20 20  20 20 20 20 20 20 20 20  |1.....          |
00000320  32 00 ff 00 05 0c 20 20  20 20 20 20 20 20 20 20  |2.....          |
00000330  33 00 ff 00 05 1c 20 20  20 20 20 20 20 20 20 20  |3.....          |
00000340  34 00 ff 00 05 2c 20 20  20 20 20 20 20 20 20 20  |4....,          |
00000350  35 00 ff 00 05 3c 20 20  20 20 20 20 20 20 20 20  |5....<          |
00000360  36 00 ff 00 05 4c 20 20  20 20 20 20 20 20 20 20  |6....L          |
00000370  37 00 ff 00 05 5c 20 20  20 20 20 20 20 20 20 20  |7....\          |
00000380  38 00 ff 00 05 6c 20 20  20 20 20 20 20 20 20 20  |8....l          |
00000390  39 00 ff 00 05 7c 20 20  20 20 20 20 20 20 20 20  |9....|          |
000003a0  3a 00 ff 00 05 8c 20 20  20 20 20 20 20 20 20 20  |:.....          |
000003b0  3b 00 ff 00 05 9c 20 20  20 20 20 20 20 20 20 20  |;.....          |
000003c0  3c 00 ff 00 06 0c 20 20  20 20 20 20 20 20 20 20  |<.....          |
000003d0  3d 00 ff 00 06 1c 20 20  20 20 20 20 20 20 20 20  |=.....          |
000003e0  3e 00 ff 00 06 2c 20 20  20 20 20 20 20 20 20 20  |>....,          |
000003f0  3f 00 ff 00 06 3c 20 20  20 20 20 20 20 20 20 20  |?....<          |
00000400  40 00 ff 00 06 4c 20 20  20 20 20 20 20 20 20 20  |@....L          |
00000410  41 00 ff 00 06 5c 20 20  20 20 20 20 20 20 20 20  |A....\          |
00000420  42 00 ff 00 06 6c 20 20  20 20 20 20 20 20 20 20  |B....l          |
00000430  43 00 ff 00 06 7c 20 20  20 20 20 20 20 20 20 20  |C....|          |
00000440  44 00 ff 00 06 8c 20 20  20 20 20 20 20 20 20 20  |D.....          |
00000450  45 00 ff 00 06 9c 20 20  20 20 20 20 20 20 20 20  |E.....          |
00000460  46 00 ff 00 07 0c 20 20  20 20 20 20 20 20 20 20  |F.....          |
00000470  47 00 ff 00 07 1c 20 20  20 20 20 20 20 20 20 20  |G.....          |
00000480  48 00 ff 00 07 2c 20 20  20 20 20 20 20 20 20 20  |H....,          |
00000490  49 00 ff 00 07 3c 20 20  20 20 20 20 20 20 20 20  |I....<          |
000004a0  4a 00 ff 00 07 4c 20 20  20 20 20 20 20 20 20 20  |J....L          |
000004b0  4b 00 ff 00 07 5c 20 20  20 20 20 20 20 20 20 20  |K....\          |
000004c0  4c 00 ff 00 07 6c 20 20  20 20 20 20 20 20 20 20  |L....l          |
000004d0  4d 00 ff 00 07 7c 20 20  20 20 20 20 20 20 20 20  |M....|          |
000004e0  4e 00 ff 00 07 8c 20 20  20 20 20 20 20 20 20 20  |N.....          |
000004f0  4f 00 ff 00 07 9c 20 20  20 20 20 20 20 20 20 20  |O.....          |
00000500  50 00 ff 00 08 0c 20 20  20 20 20 20 20 20 20 20  |P.....          |
00000510  51 00 ff 00 08 1c 20 20  20 20 20 20 20 20 20 20  |Q.....          |
00000520  52 00 ff 00 08 2c 20 20  20 20 20 20 20 20 20 20  |R....,          |
00000530  53 00 ff 00 08 3c 20 20  20 20 20 20 20 20 20 20  |S....<          |
00000540  54 00 ff 00 08 4c 20 20  20 20 20 20 20 20 20 20  |T....L          |
00000550  55 00 ff 00 08 5c 20 20  20 20 20 20 20 20 20 20  |U....\          |
00000560  56 00 ff 00 08 6c 20 20  20 20 20 20 20 20 20 20  |V....l          |
00000570  57 00 ff 00 08 7c 20 20  20 20 20 20 20 20 20 20  |W....|          |
00000580  58 00 ff 00 08 8c 20 20  20 20 20 20 20 20 20 20  |X.....          |
00000590  59 00 ff 00 08 9c 20 20  20 20 20 20 20 20 20 20  |Y.....          |
000005a0  5a 00 ff 00 09 0c 20 20  20 20 20 20 20 20 20 20  |Z.....          |
000005b0  5b 00 ff 00 09 1c 20 20  20 20 20 20 20 20 20 20  |[.....          |
000005c0  5c 00 ff 00 09 2c 20 20  20 20 20 20 20 20 20 20  |\....,          |
000005d0  5d 00 ff 00 09 3c 20 20  20 20 20 20 20 20 20 20  |]....<          |
000005e0  5e 00 ff 00 09 4c 20 20  20 20 20 20 20 20 20 20  |^....L          |
000005f0  5f 00 ff 00 09 5c 20 20  20 20 20 20 20 20 20 20  |_....\          |
00000600  60 00 ff 00 09 6c 20 20  20 20 20 20 20 20 20 20  |`....l          |
00000610  61 00 ff 00 09 7c 20 20  20 20 20 20 20 20 20 20  |a....|          |
00000620  62 00 ff 00 09 8c 20 20  20 20 20 20 20 20 20 20  |b.....          |
00000630  63 00 ff 00 09 9c 20 20  20 20 20 20 20 20 20 20  |c.....          |
00000640

标准文档草案 ISO/IEC CD2.1 1989:202x 提到了 USAGE PACKED-DECIMAL 短语......

USAGE PACKED-DECIMAL 子句指定基数 10 用于表示计算机存储中的数字项。此外,本节规定每个数字位置应占用计算机存储中可能的最小配置。每个实现者都指定了 USAGE PACKED-DECIMAL 子句对计算机存储中数据项的对齐和表示的精确影响,包括任何代数符号的表示。实施者应分配足够的计算机存储空间以包含相关十进制图片字符串所隐含的最大值范围。如果指定了 WITH NO SIGN 短语,则计算机存储中数据项的表示不保留用于表示任何符号值的存储。数据项的PICTURE字符串不能包含符号'S';数据项始终被认为具有零或正值。

于 2021-02-22T20:09:44.057 回答