gpt4 book ai didi

binary - 在 COBOL 中与 Pic X 数据执行二进制 OR

转载 作者:行者123 更新时间:2023-12-02 05:45:26 26 4
gpt4 key购买 nike

我定义了许多标志(由远远超出我控制范围的头文件),如下所示:

  *
* OPTVAL field for IPV6_ADDR_PREFERENCES_FLAGS
*
01 IPV6-ADDR-PREFERENCES-FLAGS PIC X(4).
*
* IPV6_ADDR_PREFERENCES_FLAGS mappings
*
77 IPV6-PREFER-SRC-HOME PIC X(4) VALUE X'00000001'.
77 IPV6-PREFER-SRC-COA PIC X(4) VALUE X'00000002'.
77 IPV6-PREFER-SRC-TMP PIC X(4) VALUE X'00000004'.
77 IPV6-PREFER-SRC-PUBLIC PIC X(4) VALUE X'00000008'.
77 IPV6-PREFER-SRC-CGA PIC X(4) VALUE X'00000010'.
77 IPV6-PREFER-SRC-NONCGA PIC X(4) VALUE X'00000020'.

我需要对其中一些标志执行二进制或,我想知道是否有一种我不知道的简单方法可以做到这一点。是否有一个简单的关键字或语法可以使我的程序将这些标志视为二进制值并让我进行数学计算,或者这个头文件完全损坏了?

最佳答案

我认为这个库写得不好。如果您要编写一个供 COBOL 使用的低级库,您应该选择 COBOL 更容易操作的数据类型。在这种情况下,代表长字(S9(9) COMP)的 COMP 项对于 COBOL 来说会更容易处理。

假设您将这些值进行“或”运算以调用较低级别的库,则只需将它们加在一起即可获取标志值。这是可行的,因为每个常量都有一个位集。

您可以将常量移动到临时重定义区域,或者利用 COBOL 缺乏类型安全的优势并将它们传递给子程序进行操作。以下内容适用于 VMS COBOL:

IDENTIFICATION DIVISION.
PROGRAM-ID. SAMPLEOR.
DATA DIVISION.
WORKING-STORAGE SECTION.
*
* OPTVAL field for IPV6_ADDR_PREFERENCES_FLAGS
*
01 IPV6-ADDR-PREFERENCES-FLAGS PIC X(4).
*
* IPV6_ADDR_PREFERENCES_FLAGS mappings
*
77 IPV6-PREFER-SRC-HOME PIC X(4) VALUE X'00000001'.
77 IPV6-PREFER-SRC-COA PIC X(4) VALUE X'00000002'.
77 IPV6-PREFER-SRC-TMP PIC X(4) VALUE X'00000004'.
77 IPV6-PREFER-SRC-PUBLIC PIC X(4) VALUE X'00000008'.
77 IPV6-PREFER-SRC-CGA PIC X(4) VALUE X'00000010'.
77 IPV6-PREFER-SRC-NONCGA PIC X(4) VALUE X'00000020'.

PROCEDURE DIVISION.
1.
CALL "BINARYOR"
USING IPV6-PREFER-SRC-HOME
IPV6-PREFER-SRC-COA
IPV6-ADDR-PREFERENCES-FLAGS.
CALL "BINARYOR"
USING IPV6-PREFER-SRC-PUBLIC
IPV6-ADDR-PREFERENCES-FLAGS
IPV6-ADDR-PREFERENCES-FLAGS.

IF IPV6-ADDR-PREFERENCES-FLAGS NOT = X'0000000B'
DISPLAY "Failure"
END-IF.

END PROGRAM SAMPLEOR.

IDENTIFICATION DIVISION.
PROGRAM-ID. BINARYOR.

DATA DIVISION.
WORKING-STORAGE SECTION.

LINKAGE SECTION.
01 ARG1 PIC S9(9) COMP.
01 ARG2 PIC S9(9) COMP.
01 RESULT PIC S9(9) COMP.

PROCEDURE DIVISION USING ARG1 ARG2 RESULT.
1.
ADD ARG1 TO ARG2 GIVING RESULT.
END PROGRAM BINARYOR.

如果这不起作用,那么您需要研究 COBOL 平台的二进制项表示,以找出正确的类型。

我在 COBOL 中做了很多(可能太多了)较低级别的事情(几十年前)。通常,你可以解决它。但到了某个时候,它就变得太难了,不值得这么麻烦。在这一点上,调用一种更适合处理位的语言(如 C)是值得的。

关于binary - 在 COBOL 中与 Pic X 数据执行二进制 OR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1045449/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com