如何将十进制转换为压缩十进制/COMP-3

Posted

技术标签:

【中文标题】如何将十进制转换为压缩十进制/COMP-3【英文标题】:how to convert decimal to Packed decimal/COMP-3 【发布时间】:2016-05-11 16:01:49 【问题描述】:

我需要将一些十进制转换为 PD6.2,然后将其发送到 Mainframe。在 C# 中很难找到任何函数。请帮忙。谢谢一百万

【问题讨论】:

你已经试过什么代码了? @Flexicoder 没有任何代码。 这里已经有不同语言的负载。我的建议:不要这样做。在固定长度字段的固定位置发送“纯文本”数据,小数点为物理句号/句点。 IBM 大型机处理这个问题非常容易,这也意味着(假设您对所有“非文本”字段都这样做)您可以在文件/记录级别进行 ASCII/EBCDIC 转换,而不是逐个字段- 字段,如果您的记录有二进制或压缩十进制或浮点数据(既不是 ASCII 也不是 EBCDIC,它们只是那些东西并且不能“转换”)。跨度> 【参考方案1】:

看看这是否有效

        public static void Main()
        
            string lookup = "0123456789";
            int input = 123456789;
            string input_str = input.ToString();
            List<byte> output = new List<byte>();
            int index = 0;
            //odd number characters
            if (input_str.Length % 2 == 1)
            
                output.Add((byte)lookup.IndexOf(input_str.Substring(index++, 1)));
            
            for (int i = index; i < input_str.Length; i += 2)
            
                output.Add((byte)((lookup.IndexOf(input_str.Substring(i, 1))) << 4 | lookup.IndexOf(input_str.Substring(i + 1, 1))));
            



        

【讨论】:

谢谢,但是输出很奇怪。 @MikeLong “非常奇怪”现在告诉我们。请注意,代码似乎没有对嵌入的“符号”(低阶、最右边、nybble)做任何事情,但表面上它正在做部分工作。现在,想想仅仅输出一个固定长度的“字符串”会容易得多(但没有分隔符,只是一个固定长度的数字块,前导零和一个实际的小数点后跟两位数字。我不知道'认为您甚至不会考虑这样做名副其实的“代码”,并且您将获得 100% 的准确度。如果您需要一个带符号的值,请选择前导符号或尾随符号,明确地作为 + 或 -。 @MikeLong 那么在Mainframe上,我们以COBOL为例,由MOVE something TO something-else处理。好的,如果源是压缩十进制(数据定义告诉编译器为 MOVE 生成什么代码),那也是一样的,但请记住第二大优势(首先是你不能陷入困境) (假定的)ASCII 到 EBCDIC 的转换。 用 c# 做这件事比 40 年前在大学里用汇编语言做这件事要容易。 @jdweng 这可能是由于我的理解有限,但我没有看到任何代码 nyble ???。这是Java中的答案***.com/questions/4337912/…

以上是关于如何将十进制转换为压缩十进制/COMP-3的主要内容,如果未能解决你的问题,请参考以下文章

python 数值转BCD,如何拼接二进制字符串

二进制数转换为BCD码的方法都有哪些?

php编程:将26位字母进制转换为10进制数字,如何做?

Delphi 如何将十六进制的UTF-8编码转换为汉字

java中如何将字符串转换为二进制数

十进制怎么转成BCD码