Hex в целое (4 байта)

Я работаю с ZigBee, получаю данные с датчика конечного устройства и хочу преобразовать из шестнадцатеричного в целочисленное. Данные из 4 байт, эта информация касается батареи, пример того, что я получаю, будет таким: «00 00 00 e1» (но без пробелов), и мне нужно передать это напряжениям, но сначала я думаю, что мне нужно передать его в инт.

Кто-нибудь может мне помочь? Я делаю свое приложение для Android.

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


person Despotars    schedule 16.09.2013    source источник
comment
Вы получаете строку ("000000e1") или массив байтов (0x00, 0x00, 0x00, 0xe1)? В конечном итоге вы будете использовать другой код для обработки каждого представления в 32-разрядное целое число без знака с обратным порядком байтов.   -  person tomlogic    schedule 16.09.2013


Ответы (3)


int n = (int)Long.parseLong(st.replaceAll("\\s+",""), 16);

(где st — ваша строка) делает это. Две вещи:

replaceAll удаляет все пробелы.

Я иду через парсер Long, чтобы обойти NumberFormatExceptions для негативов

person Bathsheba    schedule 16.09.2013
comment
Спасибо за ответ. Когда я получаю информацию, у меня нет пробелов, вы говорите мне, что передаете 8 символов, и с их помощью я преобразовал бы функцию в int? - person Despotars; 16.09.2013
comment
Ваш пример содержит пробелы, поэтому я предположил, что вам нужно его проанализировать. Без пробелов вы можете просто сделать int n = (int)Long.parseLong(st, 16);, снова пройдя Long, чтобы обойти NumberFormatExceptions для негативов. - person Bathsheba; 16.09.2013

Используйте Integer.parseInt() для этого:

Анализирует строковый аргумент как целое число со знаком в системе счисления, указанной вторым аргументом.

Пример:

Integer.parseInt("-FF", 16) // pass 16 to indicate an hexadecimal value
=> -255
person Óscar López    schedule 16.09.2013
comment
Спасибо за ответ, значит, я могу использовать эту функцию, чтобы получить данные в int, тогда только я должен передать его на напряжение, не так ли? - person Despotars; 16.09.2013
comment
@Despotars Я не понимаю твоего вопроса. Эта функция преобразует шестнадцатеричный формат в целочисленный. Точно так же функцияInteger.toString() преобразует целое число в шестнадцатеричное. Используйте их по мере необходимости. - person Óscar López; 16.09.2013

person    schedule
comment
Благодарю за ваш ответ! я собираюсь попробовать - person Despotars; 16.09.2013