Редактировать: Все, после некоторых исследований я ответил на свой вопрос.Короче говоря, мой код работает нормально, но отсутствует концепция, чтобы понять вывод.Мысль поделиться на благо других.Я был в замешательстве из-за непонимания представления двойной точности (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;
}
}