首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EBCDIC COMP value to整数

EBCDIC COMP value to整数
EN

Stack Overflow用户
提问于 2021-05-08 07:39:15
回答 2查看 104关注 0票数 0

如何使用PIC S9(04) COMP转换EBCDIC编码文件。转换为整数值?

该文件的第一行包含1234,第二行包含-1234。

二进制文件:

0101100011010010101100000101000011101111011000001011000001010000

示例:

EN

回答 2

Stack Overflow用户

发布于 2021-05-08 10:28:30

如何使用PIC S9(04) COMP转换EBCDIC编码文件。转换为整数值?

别干那事。

在文件转换期间,使用EBCDIC将二进制数据转换为ASCII表。04 D2 (+1234)已转换为1A 4B04 (EBCDIC SEL)已更改为1A (ASCII SUB),因为该转换没有等效项。D2 (EBCDIC 'K')改为4B (ASCII 'K')。由于SUB的原因,无法反转转换。-1234的转换也存在同样的问题。

最好的选择是使用PIC +9(04),它在转换之前和之后都是+1234-1234

使用写入文件的PIC +9(04)测试数据

代码语言:javascript
复制
+1234
-1234
+0001
-0001
+0000

测试程序

代码语言:javascript
复制
using System;
using System.IO;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            string path = "z:e1.txt";
            using (StreamReader sr = new StreamReader(path))
            {
                while (sr.Peek() >= 0)
                {
                    String s = sr.ReadLine();
                    short n = Int16.Parse(s);
                    Console.WriteLine(n);
                }
            }
        }
    }
}

显示结果

代码语言:javascript
复制
1234
-1234
1
-1
0
票数 2
EN

Stack Overflow用户

发布于 2021-05-08 19:47:57

具有计算性用法的COBOL数据类型(COMPCOMP-n)是而不是文本,因此您不能对它们执行任何字符转换操作。

计算类型存储为二进制数、浮点数或压缩十进制数。COMP是二进制的。长度取决于PIC子句中9的数量。请注意,二进制类型以big-endian格式存储。

在您的示例中,PIC +9(4)分别占用两个字节。例如。如果你看到

代码语言:javascript
复制
0x1234

作为输入数据中PIC +9(4) COMP字段的十六进制表示,这表示数字(0x12 * 0x100) + 0x34,以十进制(18 * 256) + 52 = 4608 + 52 = 4660表示。

总之,包含PIC ... USAGE DISPLAYPIC ... USAGE COMP-n类型字段的混合数据(记录)绝不能转换,而必须拆分成单独的字段,并且每个字段都必须根据其USAGE类型进行处理。

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

https://stackoverflow.com/questions/67442787

复制
相关文章

相似问题

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