如何解决如何使用COBOL中的不同输入将十六进制转换为Ascii
我的意图是能够从HEX-NUM打印ascii,但我希望能够更改输入的十六进制值,就像这样:
WORKING-STORAGE SECTION.
01 HEX-INPUT PIC X(2) VALUE "3C".
01 HEX-NUM PIC X VALUE X"HEX-INPUT".
但是,这会导致出现错误,因为X"..."
试图将HEX-INPUT读取为十六进制值,而我想访问已定义为3C的值。
有什么想法我需要做些什么才能实现这种灵活性? 我需要在程序中经常更改十六进制输入,因此很麻烦。
解决方法
删除HEX-INPUT
并使用。
01 HEX-NUM PIC X VALUE X"3C".
如果您打算将两个十六进制字符转换为一个字符值,则此代码应该没问题。
WORKING-STORAGE SECTION.
01 HEX-INPUT PIC XX VALUE "3C".
01 HEX-NUM PIC X.
01 HEX-TABLE PIC X(16) VALUE "0123456789ABCDEF".
01 HEX-VALUE COMP PIC 9(4).
01 HEX-TALLY COMP PIC 9(4).
PROCEDURE DIVISION.
BEGIN.
MOVE 0 TO HEX-TALLY
INSPECT HEX-TABLE TALLYING HEX-TALLY FOR
CHARACTERS BEFORE HEX-INPUT (1:1)
COMPUTE HEX-VALUE = HEX-TALLY * 16
MOVE 0 TO HEX-TALLY
INSPECT HEX-TABLE TALLYING HEX-TALLY FOR
CHARACTERS BEFORE HEX-INPUT (2:1)
ADD HEX-TALLY TO HEX-VALUE
MOVE FUNCTION CHAR (HEX-VALUE + 1) TO HEX-NUM
STOP RUN
.
将两个字符3C
转换为值为X“ 3C”的单个字符。
上面有替代代码的方法。我之所以没有发布它,是因为序数值和字母可能会造成混淆;但是,由于您在评论中提出了这个问题,....
以下,hex2val
和val2hex
使用仅包含十六进制字符的有限字母。由于它们限制字母,因此必须将它们称为单独编译的程序,并且不能复制到任何其他程序中,例如已执行的程序或嵌套程序。
hex2val
将两个字符的十六进制数据项转换为其等效的数值。
val2hex
将数字值转换为等效的两个字符的十六进制数据项。
注意:- 1
和+ 1
函数分别使用ORD
和CHAR
。由于"0"
是受限字母的第一个字符(CHAR (1)
),因此是必需的。
program-id. hex2val.
environment division.
configuration section.
object-computer. computer-name-here
sequence hex-digits
.
special-names.
alphabet hex-digits
"0" thru "9" "A" thru "F"
.
data division.
linkage section.
01 hex-in pic xx.
01 hex-value comp pic 9(4).
procedure division using hex-in hex-value.
begin.
compute hex-value =
(function ord (hex-in (1:1)) - 1) * 16
+ (function ord (hex-in (2:1)) - 1)
exit program
.
end program hex2val.
program-id. val2hex.
environment division.
configuration section.
object-computer. computer-name-here
sequence hex-digits
.
special-names.
alphabet hex-digits
"0" thru "9" "A" thru "F"
.
data division.
linkage section.
01 hex-value comp pic 9(4).
01 hex-out pic xx.
procedure division using hex-value hex-out.
begin.
move function char ( hex-value / 16 + 1 )
to hex-out (1:1)
move function char (
( function mod (hex-value 16)) + 1 )
to hex-out (2:1)
exit program
.
end program val2hex.
请注意,某些名称已更改,但是较早的程序可以简化为CALL
和MOVE
。附加代码显示了调用配套程序。
data division.
working-storage section.
1 hex-in pic xx value "3C".
1 hex-out pic xx value " ".
1 hex-char pic x.
1 hex-value comp pic 9(4).
procedure division.
begin.
call "hex2val" using hex-in hex-value
move function char (hex-value + 1) to hex-char
call "val2hex" using hex-value hex-out
display hex-out
stop run
.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。