【发布时间】:2014-05-13 19:30:58
【问题描述】:
我有一个混合了文本和数字字段的 cobol“磁带格式”转储。我正在将 C# 中的文件作为二进制数组(字节数组)读取。我有复印本,格式在文本字段上排列得很好。还有许多 COMP-3 字段。这些字段中的数据似乎与任何 BCD 格式都不匹配。我知道数据应该是什么,并且我有 COMP-3 的原始字节。我尝试先转换为 EBCDIC,但没有产生更好的结果。关于如何以其他方式在内部存储 COMP-3 编号的任何想法?以下是 PIC、原始数据和预期数字的三个示例。我知道我的字段位置是正确的,因为数字的两边都有 alpha 数据,并且所有排列都正确。
第一个例子: 该领域的PIC是9(9)COMP-3 数据有 5 个字节,十六进制值为 02 01 20 91 22 结果数据应为日期 (00CCYYMMDD)。这个特定的日期应该是 3-17-14。
第二个例子: 该领域的PIC是S9(3)COMP-3 数据有 2 个字节,十六进制值为 0A 14 结果值应在 900 到 999 之间 我的理解是“S”意味着最后一个半字节应该是0xC或0xD来表示+或-
第三个例子: 该领域的PIC是S9(15)V99 COMP-3 数据有 9 个字节,十六进制值为 00 00 00 00 00 00 01 80 0C 结果值应为 12.00
好的,感谢那些回复的人,因为他们为我指明了正确的方向。这确实是一个 ASCII/EBCDIC 表示问题。 BCD 存储在 EBCDIC 中。使用 ASCII 到 EBCDIC 转换表会产生格式正确的 BCD 数字:
我使用这个链接来映射数据:http://shop.alterlinks.com/ascii-table/ascii-ebcdic-us.php
我的数据:0A 14 转换:25 3C(原来 253 是有效值,规范错误)C = +,一切都好
我的数据:01 80 0C(不包括前导零)已转换:01 20 0C 12.00 C = +,格式中隐含 2 位数字,一切正常
我的数据:02 01 20 91 22 已转换:02 01 40 31 7F 2014/03/17(F 是未使用的半字节),一切都很好
【问题讨论】:
标签: format cobol bcd ebcdic comp-3