我有一个关于在dsnacics存储过程的上下文中在dfhcommarea中传递comp和comp 3字段数据的问题。如果字段是x(3),我传递了3个字符,并在前面加上空格,以防数据较小。但是,如果字段是s9(4)comp,我应该在dfhcommarea中传递多少个字符,以防我必须发送值“2”?
snvhrwxg1#
一般而言,COBOL中的PIC S9(4) COMP字段是一个半字二进制字段,这意味着它占用2个字节的物理空间,其值以十六进制表示。PIC S9(4) COMP字段可以存储从-32,768(十六进制为8000)到+32,767(十六进制为7 FFF)的值。但是,请注意您使用的TRUNC编译器选项。如果传递数据的程序编译为TRUNC(BIN),则可以在字段中使用上述范围的值。但是,如果您指定了TRUNC(OPT)编译器选项,并且将值32767移到PIC S9(4) COMP字段中,你很可能最终得到的值是2767,而不是32767!也就是说,不是你所期望的值。(那个值让我吃了一两次亏)。以下是对文档中某个页面的引用,可能会有所帮助https://www.ibm.com/docs/en/cobol-zos/6.1?topic=data-examples-numeric-internal-representation如果您想将值2移动到PIC S9(4) COMP字段中,则在内部它将是表示为(十六进制)0002的2个字节。
PIC S9(4) COMP
TRUNC
TRUNC(BIN)
TRUNC(OPT)
1条答案
按热度按时间snvhrwxg1#
一般而言,COBOL中的
PIC S9(4) COMP
字段是一个半字二进制字段,这意味着它占用2个字节的物理空间,其值以十六进制表示。PIC S9(4) COMP
字段可以存储从-32,768(十六进制为8000)到+32,767(十六进制为7 FFF)的值。但是,请注意您使用的
TRUNC
编译器选项。如果传递数据的程序编译为TRUNC(BIN)
,则可以在字段中使用上述范围的值。但是,如果您指定了TRUNC(OPT)
编译器选项,并且将值32767移到PIC S9(4) COMP
字段中,你很可能最终得到的值是2767,而不是32767!也就是说,不是你所期望的值。(那个值让我吃了一两次亏)。以下是对文档中某个页面的引用,可能会有所帮助https://www.ibm.com/docs/en/cobol-zos/6.1?topic=data-examples-numeric-internal-representation
如果您想将值2移动到
PIC S9(4) COMP
字段中,则在内部它将是表示为(十六进制)0002的2个字节。