我试图了解ASN.1 REAL类型是否要映射为Java类型的float和double?
Java BigDecimal怎么样?是否包含在ASN.1 REAL类型中?
我正在查看链接https://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf中的文档,但对于我的问题无法理解。
谢谢。
答案 0 :(得分:1)
ASN.1没有定义到任何特定编程语言的映射。它描述了"抽象值"并且编码规则指定在跨越行时应如何编码(或序列化)这些抽象值。到特定编程语言的映射留给工具供应商。由于ASN.1支持基数2和基数10 REAL值,因此适用于Java的良好ASN.1工具将根据ASN.1 REAL类型上的约束将相应的REAL类型适当地映射到float,double或BigDecimal。 p>
答案 1 :(得分:0)
我不熟悉java,它是BigDecimal,但ASN.1 REAL应该能够编码任何浮点数。
根据您在问题中指出的document的第8.5.6.4节d),您可以将指数编码为256字节(2 8 )。这就是你使用基数2.对于基数10,你用一些标准化形式编码你的数字的文本表示,即45.E123456788。
答案 2 :(得分:0)
REAL类型由两组不同的值组成,即基数10和基数2中的值。从技术上讲,表示相同实数值的两个不同基数中的值仍然是不同的REAL值。由于存在基数为10的值,因此REAL可以表示无法在Java double或float中精确表示的实数值(例如.1)。
REAL类型在X.680中定义。
某些编码规则(例如OER,X.696)对REAL的特殊规则受限于可以用IEEE 754格式表示的规则。