我需要从类型为"PIC S9(2) COMP“的COBOL变量检索数据到类型为"int”的C变量。
它使用两个字节的字符串存储,所以我将其作为两个字符来接收。
我知道COBOL以二进制格式将十进制数据存储到"S9(2) COMP“中,因此这将极大地帮助我了解任何安全转换它的算法或方法。
欢迎任何形式的帮助和建议。
更新:
最后,我们决定将实现的COBOL部分中变量的图片更改为9(3),这是由于endianess问题。
感谢你们的回答。
发布于 2011-01-04 17:17:02
你应该可以把它看作是一个短的,或者一个16位的二次补整数.您将需要检查endianess,但这取决于哪个平台发起了字段。
发布于 2011-01-04 18:41:23
s9(2) comp的格式将取决于Cobol编译器。我知道的大多数Cobol编译器都会将它存储为一个2字节的大端整数(高字节优先;Intel处理器存储低字节优先)。例外情况包括
MicroFocus (取决于编译参数)通常1字节整数RM:有自己的“二进制格式”。
如果它是一个2字节整数
大端计算机上的
。
发布于 2011-01-06 16:37:44
S9(2) COMP表示它是一个左对齐(字左边的0位),没有解释同步有符号的数字字段,可能是内部或伪二进制格式,可以容纳2位数字,并且可能在单词中(或在不同的内存位置)中的一点用于指示该值是正的还是负的。cobol程序可以有一种特定的方法来存储可能与C不直接兼容的COMP数据项。看来,您需要以相关的方式访问和测试符号指示符,并且您可能必须访问每一个字节(8位中的2位)或字符(2位中的2位),检查它们是大端还是小端点,并将它们放入C中的一个有符号整数字段中。这将取决于创建和读取数据字段所涉及的计算机的体系结构和编译器,如果涉及两种计算机类型,则可能会更加复杂。
https://stackoverflow.com/questions/4591828
复制相似问题