2017-02-09 4 views
0

Я пытаюсь преобразовать значение байта 2 байта, которое равно 0D 82, чтобы удвоить стоимость моего проекта.JAVA/Как преобразовать 2-байтовый поплавок в двойное значение

Когда я смоделировал это значение, я получил 28.2. Итак, как я могу преобразовать это значение байта 2 байта в двойное значение на java?

Спасибо за помощь!

+1

Поплавки - это 4 байта, а не 2. Удваивается 8 байт. Что это за таинственный 2-байтовый поплавок? – Kayaman

+0

28.2 в стандартном стандарте по стандарту IEEE - 0x41e1999a. Какой стандарт генерирует 2 байта? Какая исходная система/архитектура - это «плавающий»? –

+0

Я пытаюсь преобразовать это 2-байтовое значение с плавающей точкой, которое поступает с дорожки шины KNX, чтобы удвоить значение. KNX отправляет 2 байта float при работе с Java. – rdvnbl

ответ

1

Посмотрите на следующую библиотеку:

https://sourceforge.net/p/calimero/wiki/Home/

Это обеспечивает Java API к сети KNX и ее типы данных. Это, скорее всего, сделает то, что вы хотите, - уточните класс tuwien.auto.calimero.dptxlator.DPTXlator2ByteFloat.

Вы можете использовать этот код:

byte[] test = new byte[2]; 
test[0] = (byte)0x0D; 
test[1] = (byte)0x82; 

DPTXlator2ByteFloat floatTranslator = new DPTXlator2ByteFloat(DPTXlator2ByteFloat.DPT_AIR_PRESSURE); 
floatTranslator.setData(test); 
double value = (double)floatTranslator.getValueFloat(); 

переменная value будет иметь значение 28,2, как ожидалось.

Импорт следующее в ваших зависимости Maven, чтобы включить библиотеку:

<dependency> 
    <groupId>com.github.calimero</groupId> 
    <artifactId>calimero-core</artifactId> 
    <version>2.2-beta</version> 
<dependency> 

Надеется, что это помогает.

+0

floatTranslator.setData (тест); метод требует еще одного параметра, который называется offset.When я ставлю 0 в качестве смещения, он работает. Спасибо за помощь. – rdvnbl

+0

@rdvnbl Да, есть два перегруженных метода, называемых 'setData'. Один со смещением, один без. Увидев, что это домашняя автоматизация, вы, вероятно, будете получать поток данных, и вам нужно отслеживать смещение. Я просто выбрал простейшую реализацию для ясности. Также обратите внимание на аргумент 'DPTXlator2ByteFloat.DPT_XXX' для конструктора - это будет важно, и вам нужно будет выбрать правильный для потока байтов датчика. –

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