cobol - 将 COBOL 二进制显示为数字

标签 cobol

我对 COBOL 完全陌生。我有一个小的 COBOL 程序和一个小的 C 文件。根据这篇文章:https://www.ibm.com/support/knowledgecenter/en/SSLTBW_2.1.0/com.ibm.zos.v2r1.ceea400/sdtpt.htm
COBOL 中 C 有符号整数的等价物是

PIC S9(9) USAGE IS BINARY

我想从 COBOL 调用 C 文件中的函数,并将结果显示在 COBOL 中。我能够调用该函数,它似乎按预期运行,数据按预期传递,但我无法在 COBOL 中使用 DISPLAY 显示二进制值。

我的 COBOL 程序:
   IDENTIFICATION DIVISION.
   PROGRAM-ID. MSQLTST5_COBHELPER.

   DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 SQLCODE PIC S9(9) USAGE IS BINARY VALUE 100.


   PROCEDURE DIVISION.
   HEAD SECTION.

   MAIN.

       DISPLAY "COBOL, sqlcode is: " SQLCODE.
       CALL "CONNECT_DEFAULT" USING SQLCODE.
       DISPLAY "COBOL, sqlcode is: " SQLCODE.

       STOP RUN.

   END PROGRAM MSQLTST5_COBHELPER.

我正在调用的 C 函数:
void connect_default(int* sqlcode)
{
    printf("C, sqlcode is: %d\n", *sqlcode);
    // internal code that places the expected error code -14006 in the variable sqlcode
    printf("C, sqlcode is: %d\n", *sqlcode);
}

运行我的 COBOL 程序的输出:
COBOL, sqlcode is: d
C, sqlcode is: 100
C, sqlcode is: -14006
COBOL, sqlcode is: J▒▒▒

似乎该变量确实具有我给它的值 100,然后在 C 和 COBOL 之间正确传递,但是当我要求 COBOL 显示变量时,它似乎试图找出具有给定 ASCII 代码的字符, 而不是数值,因为显示的是字符 'd',其 ASCII 代码为 100,而不是数字 100。

如何在 COBOL 中将此值显示为数值?

最佳答案

你为什么不转移SQLCODE的内容字段到 USAGE DISPLAY字段使用 MOVE操作说明?它将二进制数转换为数字数。

如果格式很奇怪 - 这就是原因:

不带签名的数字图片SIGN SEPARATE子句必须以某种方式在不占用空间的情况下包含符号,因此大多数编译器将最后一位数字与数字的符号组合在一起。大多数约定使用 J -1 直到 R对于-9。他们还用前导零填充数字。所以 -14006 将转换为 00001400O ,因为最后一位是6,又因为必须和减号结合,所以最后一位变成-6,用O表示.大致相同的推理对 00000010{ 很重要.

为了重新格式化数字,您实际上可以使用另一张图片,例如

pic S9(9) sign leading separate

那将显示 -14006-000014006

关于cobol - 将 COBOL 二进制显示为数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49126390/

相关文章:

java - 如何使用java解码ascii文件中的comp 3打包字段?

c# - 已签名的超值的解析器?

file - COBOL - 使用相对和动态选项打开顺序数据集时的文件状态 37

c# - 如何验证 C# 中的 Picture 子句?

pipe - 如何在没有输入源文件的情况下通过管道运行 cobc?

cobol - fileaid 中的字帖错位

file - 具有可变记录长度的 Cobol 索引文件

xml - 在 xml 输出中使用保留的 cobol 名称

cobol - 退出双重表演

cobol - Cobol 是否存在本质上使其容易受到 Y2K 问题影响的因素?