我有信息,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#将其转换为人类可读的格式/数据(例如将两个文件作为输入)?
答案 0 :(得分:4)
采用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损坏的一个很好的例子。
如果是来自大型机,那么您面临的问题是:
最好的选择是在大型机/ Cobol上进行转换并传输文本文件。
或者像coboltocsv这样的项目会使用Cobol Copybook将Cobol文件转换为Csv。
就转换comp-3而言,这很容易。有两种方法
将十六进制转换为十六进制字符串(即转换x'123c' - >“123C)并检查最后一个符号字符。请参阅COMP-3 data unpacking in Java (Embedded in Pentaho)
将该字段分成一系列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)。