首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将未压缩的十进制转换回COMP-3?

如何将未压缩的十进制转换回COMP-3?
EN

Stack Overflow用户
提问于 2010-12-03 01:28:52
回答 3查看 6.4K关注 0票数 5

我问了一个关于转换COMP字段的问题,我没有得到任何答案。

我希望堆栈溢出能在这个问题上对我有所帮助。

我成功地将COMP-3转换为decimal。我需要你的帮助,在任何高级编程语言,但最好是在Java或c#.net的COMP-3转换解压后的十进制。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-12-03 15:08:47

在压缩十进制中,-123表示为X'123d‘(最后一个nyble c、d或f是符号)。处理压缩十进制的最简单方法之一是简单地将字节转换为十六进制字符串(如果需要,反之亦然),然后使用常规字符串操作。这可能不是最有效的,但它很容易实现。

因此,将Integer (值)转换为压缩小数大致是(注意:我还没有测试代码)

代码语言:javascript
复制
String sign = "c";
if (value < 0) {
    sign = "d";
    value = -1 * value;
}
String val = value + "d"

byte[] comp3Bytes = new BigInteger(val, 16).toByteArray();

以下是一些示例代码,用于转换为comp3,以便从字节数组中检索压缩十进制请参见http://record-editor.svn.sourceforge.net/viewvc/record-editor/Source/JRecord/src/net/sf/JRecord/Common/Conversion.java?revision=3&view=markup中的方法getMainframePackedDecimal

要设置压缩小数,请参阅http://record-editor.svn.sourceforge.net/viewvc/record-editor/Source/JRecord/src/net/sf/JRecord/Types/TypePackedDecimal.java?revision=3&view=markup中的setField

这两个例程都接受一个字节数组、一个开始位置和一个字段位置的长度。

在web上还有其他这样做的例子(我认为JRanch也有做转换的代码),做一些谷歌搜索。

票数 3
EN

Stack Overflow用户

发布于 2010-12-03 05:19:31

将分区小数转换为comp-3非常简单--翻转低位字节的半字节,并去掉所有其他字节的高位半字节。

考虑数字12345 --在压缩十进制记数法中,它将是一个x'12345C‘或x'12345F’(C和F都是+,A、B和D都是-)。当您将其转换为区域小数时,您翻转了低位半字节,并在每个数字之间的高位半字节中插入了一个"F“。把它变成x'F1F2F3F4C5‘。

要将其转换回来,只需反转过程即可。使用java,它看起来像这样:

代码语言:javascript
复制
byte[] myDecimal = { 0xF1, 0xF2, 0xF3, 0xF4, 0xF5 };
byte[] myPacked = new byte[3];

//Even low nibble moved to high nibble and merged with odd low nibble
myPacked[0] = ((myDecimal[0] & 0b00001111)  << 4)) | (myDecimal[1] & 0b00001111);
myPacked[1] = ((myDecimal[2] & 0b00001111)  << 4)) | (myDecimal[3] & 0b00001111);

//Last byte gets filpped for sign
myPacked[2] = ((myDecimal[5] & 0b00001111)  << 4)) | (myDecimal[4] & 0b00001111);
票数 2
EN

Stack Overflow用户

发布于 2010-12-03 01:41:28

当我在过去使用Java处理过COMP-3时,我最终编写了一个方法来读取字节并将它们转换为一个数字。我不认为我必须写出COMP-3,但我假设我会使用相反的相同逻辑。

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

https://stackoverflow.com/questions/4337912

复制
相关文章

相似问题

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