2015-04-10 3 views
0

Ищете решение для решения моей проблемы, я нашел только Hex, подписанный с преобразованием значения int, но не обратный случай.Как преобразовать двойное знаковое значение в значение с шестнадцатеричным значением

Я попытался это:

float grades = -32.33f ; 
    System.out.println("grades: "+grades); 

    double radians = Math.toRadians(grades); 
    System.out.println("rad: "+radians); 

    radians = radians * 100000000; 
    System.out.println("rad * 10^8: "+radians); 

    String hex = Double.toHexString(radians); 
    System.out.println("signed to hex: "+hex); 

с выходом:

grados: -32.33 
rad: -0.5642649791276998 
rad * 10^8: -5.642649791276998E7 
signed to hex: -0x1.ae8000f4d5a59p25 

Но я ожидаю ПОЛУЧАЕТЕ:

FCA30001 

В этом ответе Java negative int to hex and back fails я обнаружил, что Double.toHexString(radians); дал я, как правило, не имеет значения, может быть, это и есть проблема. Есть идеи?

Заранее спасибо.

EDIT:

Я пытаюсь сделать обратную операцию:

  • 1) FCA30001 подписанному ИНТ: -56426495,
  • 2) -56426495 * 10^8 is -0.564264 radians,
  • 3) Теперь преобразование радианов в классы составляет -32,33.
+0

Возможный дубликат: http://stackoverflow.com/a/15073682/557153 – avgvstvs

+0

Возможно, вы ищете 'Long.toHexString (Double.doubleToLongBits (радианы))'? – immibis

+0

Почему вы ожидаете получить FCA30001? – immibis

ответ

0

Проверка длинный/переполнение Int: 10 нуждается в 23 бита + 2л 3 бита < 32, так что ИНТ отлично.

long radiansUp8 = 0xFFFF_FFFFL & (long)(radians * 100_000_000); 
String hex = Long.toHexString(radiansUp8); 

Хотя мы взяли Int, из-за знака, он был помещен в длинный, и маскируется с Integer.MAX_VALUE.


Для точности:

Как вы знаете double только приближение суммы степеней 2. Умножение на 10 увеличивает погрешность аппроксимации. А в вашем коде используется даже 4 байта float.

double grades = -32.33; 

должно быть немного лучше.

+0

Спасибо, я проверяю этот код, но финский вывод «подписан в hex: fca2ffff', в какой-то части я теряю цифры. Я ожидаю получить 'fca30001' – HCarrasko

+0

Я теряю 2 единицы, вы можете помочь, почему? – HCarrasko

+0

Ошибка аппроксимации начальных оценок умножается более чем на 10 . Добавлен намек на ответ. –

Смежные вопросы