首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将comp-3转换回人类可读格式。

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

Stack Overflow用户
提问于 2017-01-23 11:29:06
回答 4查看 9.6K关注 0票数 0

我得到的信息是,PIC S9(4)字段是用comp-3编码的。我还有一个数据文件,其中包含数据(在我的例子中是关于一个客户的)。当我使用notepad++打开数据文件时,它显示的是me字符,比如"DLE“、"BEL”或"NUL",这就引出了这个表格。首先,你能告诉我,"comp-3“是怎么做的吗?如何使用c#将其转换回人类可读的格式/数据(将两个文件作为输入)?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-01-23 22:38:15

Comp-3格式

以Comp-3格式

代码语言:javascript
复制
value     comp-3 (hex)
 123        x'123c'
-123        x'123d'

存在许多问题,https://stackoverflow.com/search?q=%22comp-3%22+cobol

如果这是一个大型机文件,并已转换为ASCII;它的将不能使用COBOL COMP-3数字格式问题中的第二个答案给出了一个很好的例子,说明在进行ascii转换时Comp-3的损坏。

大型机问题

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

  1. 您必须执行二进制传输。
  2. 您必须读取大型机文件结构(例如,FB记录将是固定长度的记录;没有cr/lf)。
  3. 您需要转换打包的十进制。

主机选项

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

或者,还有像共体这样的项目,它将使用Cobol文案将Cobol文件转换为Csv。

转换comp-3

至于转换comp-3,这是相当容易的。有两种方法

  1. 将十六进制转换为十六进制字符串(即转换x'123c‘-->“123 c”)并检查最后一个符号字符。
  2. 把田里分成一连串的仙女
票数 5
EN

Stack Overflow用户

发布于 2017-01-23 16:18:16

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

示例:

如果要将1234存储到COMP字段中,它将被存储为00001234,这意味着您将有以下十六进制字节001234。如果您想要将它转换回来,您可能需要将该字段转换回EBCDIC (或者您在COBOL侧使用的编码),并查看该字段的实际十六进制值。

票数 0
EN

Stack Overflow用户

发布于 2017-01-25 14:47:12

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

至于你的第二个问题把绳子分成几个部分。除了最后的4位外,每4位补偿0000将给你人类可读的结果。最后4个位,取决于它的C或D,是+或-符号。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41805313

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档