如何将十进制转换为压缩十进制/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的主要内容,如果未能解决你的问题,请参考以下文章