如何在C#.net中从EBCDIC转换为ASCII

Sai*_*Sai 10 c# ascii ebcdic

我有一个EBCDIC格式"000000 {"的值.我想将其转换为.Net Int32类型.任何人都可以让我知道我能做些什么吗?所以我的问题是给出一个字符串,其中包含EBCDIC中的带符号数字,我应该怎么做才能将它转换为.NET Int32.

非常感谢提前!

小智 24

试试这个

    #region public static byte[] ConvertAsciiToEbcdic(byte[] asciiData)
    public static byte[] ConvertAsciiToEbcdic(byte[] asciiData)     
    {          
        // Create two different encodings.         
        Encoding ascii = Encoding.ASCII;
        Encoding ebcdic = Encoding.GetEncoding("IBM037");          

        //Retutn Ebcdic Data
        return Encoding.Convert(ascii, ebcdic, asciiData);      
    }     
    #endregion      

    #region public static byte[] ConvertEbcdicToAscii(byte[] ebcdicData)
    public static byte[] ConvertEbcdicToAscii(byte[] ebcdicData)
    {         
        // Create two different encodings.      
        Encoding ascii = Encoding.ASCII;
        Encoding ebcdic = Encoding.GetEncoding("IBM037"); 

        //Retutn Ascii Data 
        return Encoding.Convert(ebcdic, ascii, ebcdicData); 
    } 
    #endregion
Run Code Online (Sandbox Code Playgroud)

  • 被否决是因为该问题与 EBCDIC 过度打孔数值相关,而不是 EBCDIC 编码文本。Simon提供的答案是对这些字段的正确处理。 (2认同)

Sim*_*ick 5

当从我们的一位客户接收数据时,以下程序可将 EBCDIC 值转换为整数。我们获得的数据可能是您可能获得的数据的子集,因此看看这是否适合您:

using System;
using System.Text;

namespace ConsoleApplication6
{
    class Program
    {
        static void Main(string[] args)
        {
            string strAmount = "00007570{";
            Console.WriteLine("{0} is {1}", strAmount, ConvertEBCDICtoInt(strAmount));
            strAmount = "000033}";
            Console.WriteLine("{0} is {1}", strAmount, ConvertEBCDICtoInt(strAmount));
            Console.ReadLine();
        }

        // This converts "00007570{" into "75700", and "000033}" into "-330"
        public static int? ConvertEBCDICtoInt(string i_strAmount)
        {
            int? nAmount = null;

            if (string.IsNullOrEmpty(i_strAmount))
                return(nAmount);

            StringBuilder strAmount = new StringBuilder(i_strAmount);
            if (i_strAmount.IndexOfAny(new char[] { '}', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R' }) >= 0)
                strAmount.Insert(0, "-");

            strAmount.Replace("{", "0");
            strAmount.Replace("}", "0");
            strAmount.Replace("A", "1");
            strAmount.Replace("J", "1");
            strAmount.Replace("B", "2");
            strAmount.Replace("K", "2");
            strAmount.Replace("C", "3");
            strAmount.Replace("L", "3");
            strAmount.Replace("D", "4");
            strAmount.Replace("M", "4");
            strAmount.Replace("E", "5");
            strAmount.Replace("N", "5");
            strAmount.Replace("F", "6");
            strAmount.Replace("O", "6");
            strAmount.Replace("G", "7");
            strAmount.Replace("P", "7");
            strAmount.Replace("H", "8");
            strAmount.Replace("Q", "8");
            strAmount.Replace("I", "9");
            strAmount.Replace("R", "9");

            // Convert the amount to a int:
            int n;
            if (int.TryParse(strAmount.ToString(), out n))
                nAmount = n;
            return (nAmount);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


Luc*_*ero 1

一般来说,您应该能够使用正确的System.Text.Encoding类加载 EBCDIC 数据(链接指向所有编码的列表,其中包括 EBCDIC 编码)。该字符串在内存中是 Unicode 的,并且可以使用 ASCII 编码保存为 ASCII。

这就是您在问题标题中所要求的。但是,我不确定这是否是您想知道的,因为您的问题对我来说并不完全清楚。如果您正在寻找 ASCII 字符代码,int只要它们只是 ASCII 字符,您就可以将字符转换为 an 。