Понимание того, как соотнести двойные значения при выводе из байтового массива с помощью println ()? - PullRequest
0 голосов
/ 25 октября 2018

Редактировать: Все, после некоторых исследований я ответил на свой вопрос.Короче говоря, мой код работает нормально, но отсутствует концепция, чтобы понять вывод.Мысль поделиться на благо других.Я был в замешательстве из-за непонимания представления двойной точности (https://en.wikipedia.org/wiki/Double-precision_floating-point_format). Значения байтового массива [64 66 1 71 -82 20 122 -31] необходимо преобразовать в биты, а затем проанализировать в соответствии со статьей вики.

Я пытаюсь понять вывод небольшой Java-программы, которую я написал для хранения двойных значений в байтовых массивах. Это вывод и следующий код. Что такое формат / представление / кодировка (?) Вывода "6466 1 71 -82 20 122 -31 "? Я пробовал многочисленные онлайн-конвертеры (hex, ascii, unicode, base64), чтобы понять, как вывод элемента байтового массива представляет двойное значение 36.01. Я знаю, что мой код хранит его в байтовом массивеправильно, так как я успешно протестировал его с другим классом, который требует широты, выраженной в виде байтового массива, и находиться в пределах определенного диапазона. Редактировать: новый вывод с добавлением Arrray.toString. Но это не решает мой вопрос. Я попробую еще разПервоначально я думал, что первым элементом байтового массива "66" было шестнадцатеричное представление для десятичного числа. Ноэто не такДесятичное число 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;
    }
}
...