将comp-3转换回人类可读格式

时间:2017-01-23 11:29:06

标签: c# cobol comp-3

我有信息,cat json.txt | openssl smime -sign -inkey example.com.key -signer example.com.pem -certfile intermediate.pem -noattr -nodetach -outform DER > apple-app-site-association 字段用comp-3编码。我还有一个包含数据的数据文件(在我的案例中是关于客户的)。当我使用记事本++打开数据文件时,它显示我的字符如“DLE”,“BEL”或“NUL”,这引导我进入table。 首先,你能解释一下“comp-3”的作用吗?我如何使用c#将其转换为人类可读的格式/数据(例如将两个文件作为输入)?

4 个答案:

答案 0 :(得分:4)

Comp-3格式

采用Comp-3格式

value     comp-3 (hex)
 123        x'123c'
-123        x'123d'

现有很多问题https://stackoverflow.com/search?q=%22comp-3%22+cobol

如果这是一个大型机文件并已转换为ASCII;它将无法使用 !!! COBOL COMP-3 number format issue中的第二个答案给出了进行ascii转换时Comp-3损坏的一个很好的例子。

大型机问题

如果是来自大型机,那么您面临的问题是:

  1. 您必须进行二元转移
  2. 您必须阅读大型机文件结构(例如,FB记录将是固定长度记录;没有cr / lf)。
  3. 您需要转换压缩十进制数。
  4. 大型机选项

    最好的选择是在大型机/ Cobol上进行转换并传输文本文件。

    或者像coboltocsv这样的项目会使用Cobol Copybook将Cobol文件转换为Csv。

    转换comp-3

    就转换comp-3而言,这很容易。有两种方法

    1. 将十六进制转换为十六进制字符串(即转换x'123c' - >“123C)并检查最后一个符号字符。请参阅COMP-3 data unpacking in Java (Embedded in Pentaho)

    2. 将该字段分成一系列nybles

答案 1 :(得分:0)

在普通PIC 9(4)字段中存储数字时,存储的值使用这些字符的十六进制代码。

示例:

1234将存储为F1F2F3F4如果您要将其存储到COMP字段,则会将其存储为00001234,这意味着您将拥有以下十六进制字节00 00 12 34.如果要将其转换回来,您可能需要将该字段转换回EBCDIC(或者您在COBOL端使用的编码),并查看该字段的实际十六进制值。

答案 2 :(得分:0)

Comp-3是一种打包格式。 S9(4)comp-3占用3个字节。 +1234将以十六进制格式存储为x'01234C'。而-1234将存储为x'01234D'。如您所见,在这种情况下,第一个字节的前4位始终为0,因此基本上您浪费了1位数。 S9(5)和S9(4)占用相同的字节。 显然你并没有真正使用3270模拟器,我不知道notepad ++,我认为ultraedit可以显示文件的十六进制格式。 PS:我建议你使用COMP而不是COMP-3。 COMP是二进制模式,其计算效率是COMP-3的3倍。

关于你的第二个问题。将字符串分成多个位。除了最后4位之外,每4位补偿0000将为您提供人类可读的结果。最后4位取决于它的C或D,是+或 - 符号。

答案 3 :(得分:0)

如果您知道该值不是十进制,请尝试将其移至PIC 9(9)。