Chvalov
@Chvalov

Float обратно в байты как реализовать?

Код с помощью которого я получаю с байт флоат значение:
byte[] response = new byte[]{-39, 118, -98, 60};

         // Получаем коефециент
        int asInt = (response[0] & 0xFF)
                | ((response[1] & 0xFF) << 8)
                | ((response[2] & 0xFF) << 16)
                | ((response[3] & 0xFF) << 24);

        float asFloat = Float.intBitsToFloat(asInt);
На выходе получаю: 0.01934378

Вопрос, а как теперь Float обратно в массив байт записать, если данные asInt отсутствуют в моем классе?
  • Вопрос задан
  • 904 просмотра
Решения вопроса 2
Chvalov
@Chvalov Автор вопроса
Пробовал вод так:
byte[] b = ByteBuffer.allocate(4).putFloat(asFloat).array();
Но на выходе я получаю в обратном порядке [60, -98, 118, -39]

UPD: Сделал вод так:
byte[] gf = ByteBuffer.allocate(4).order(ByteOrder.LITTLE_ENDIAN).putFloat(asFloat).array();

        System.out.println("Значение обратно" + Arrays.toString(gf));
И все нормально работает !
Ответ написан
Комментировать
@Mercury13
Программист на «си с крестами» и не только
int asInt = Float.floatToIntBits(asFloat);
byte data0 = (byte)asInt;
byte data1 = (byte)(asInt >> 8);
byte data2 = (byte)(asInt >> 16);
byte data3 = (byte)(asInt >> 24);


Как я понял, вы тут сериализацией занимаетесь, для этого в Java обычно используют порядок байтов Motorola и все Stream’ы выдают именно его. А тут у вас порядок Intel — видимо, для совместимости с кем-то.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы