了解使用println()从字节数组输出时如何关联双精度值?

时间:2018-10-25 01:42:24

标签: java arrays double byte representation

编辑:所有,经过一番研究,我回答了自己的问题。简而言之,我的代码运行良好,但是缺少理解输出的概念。想共享以造福他人。我的困惑来自于不理解双精度表示(https://en.wikipedia.org/wiki/Double-precision_floating-point_format)。字节数组值[64 66 1 71 -82 20 122 -31]需要转换为位,然后根据Wiki文章进行解析。

我试图了解我编写的一个小Java程序的输出,该程序用于在字节数组中存储双精度值。这是输出,下面是代码。输出“ 64 66 1 71 -82 20 122 -31”的格式/表示/编码(?)是什么?我尝试了许多在线转换器(十六进制,ASCII,unicode,base64),以了解字节数组元素的输出如何表示双精度36.01。我知道我的代码将它正确地存储在字节数组中,因为我已经成功地用另一个需要纬度表示为字节数组且在特定范围内的类测试了它。 编辑:添加Arrray.toString的新输出。但这不能解决我的问题。我会再尝试。 我最初的想法是第一个字节数组元素“ 66”是十进制3的十六进制表示形式。但是事实并非如此。十进制3是十六进制3(已通过在线转换器检查)。所以我对字节数组元素的表示感到困惑。如果这是正确的表示形式,则字节数组中的哪个值表示双精度数36.01中的哪个值?希望能弄清楚。

Output
latitude decimal format: 36.01
latitude raw byte format: [B@7f31245a
latitude bytes String.valueOf: [B@7f31245a
byte [] array values iterated via a loop... 36.01

64 66 1 71 -82 20 122 -31 

printed using Arrays.toString:[64, 66, 1, 71, -82, 20, 122, -31] 

system encodingProperty is: UTF-8

--------------------------
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.util.Arrays;

public class ByteArrayFormat {

    public static void main(String args[]) {
        double latitude = 36.01;
        ByteArrayFormat test = new ByteArrayFormat();
        test.printByte(latitude);
    }// end main

    public void printByte (double latitude) {

        byte[] latitudeInDecimalDegreesBytes = ToByteArray(latitude);
        System.out.println("latitude decimal format: " + latitude);
        System.out.println("latitude raw byte format: " + latitudeInDecimalDegreesBytes);
        System.out.println("latitude bytes String.valueOf: "+ (String.valueOf(latitudeInDecimalDegreesBytes)));
        //System.out.println("\n");
        System.out.println("byte [] array values iterated via a loop... " + latitude);
        System.out.println("\n");
        for(int i=0; i< latitudeInDecimalDegreesBytes.length ; i++) {
            System.out.print(latitudeInDecimalDegreesBytes[i] +" ");
        }
        System.out.println("\n");
        System.out.println("printed using Arrays.toString:" + Arrays.toString(latitudeInDecimalDegreesBytes) +" ");
        System.out.println("\n");
        String encodingProperty = System.getProperty("file.encoding");
        System.out.println("system encodingProperty is: " +encodingProperty);
    }

    public byte[] ToByteArray(double value) {
        byte [] bytes = ByteBuffer.allocate(8).order(ByteOrder.BIG_ENDIAN).putDouble(value).array();
        return bytes;
    }
}

0 个答案:

没有答案