Как преобразовать шестнадцатеричную строку в двойную? - PullRequest
0 голосов
/ 22 марта 2019

Я получаю шестнадцатеричные значения в диапазоне от 0x0000 до 0x01c2 из BLE на мой телефон как String.Чтобы отобразить его на графике, я должен преобразовать его в double, для чего я пробовал этот метод , но, к сожалению, в моем случае это не помогло.

Вот немного измененный код из предоставленной ссылки:

String receivedData = CommonSingleton.getInstance().mMipsData; // 0x009a
long longHex = parseUnsignedHex(receivedData);
double d = Double.longBitsToDouble(longHex);

public static long parseUnsignedHex(String text) {
    if (text.length() == 16) {
        return (parseUnsignedHex(text.substring(0, 1)) << 60)
                | parseUnsignedHex(text.substring(1));
    }
    return Long.parseLong(text, 16);
}

Любая дополнительная помощь будет принята с благодарностью.Заранее спасибо.

1 Ответ

1 голос
/ 22 марта 2019

Ваше значение не является шестнадцатеричным представлением значения с плавающей точкой IEEE-754 - это просто целое число. Поэтому просто проанализируйте его как целое число после удаления начального префикса "0x":

public class Test {
    public static void main(String[] args) {
        String text = "0x009a";

        // Remove the leading "0x". You may want to add validation
        // that the string really does start with 0x
        String textWithoutPrefix = text.substring(2);
        short value = Short.parseShort(textWithoutPrefix, 16);
        System.out.println(value);
    }
}

Если вам действительно нужно double в другом месте, вы можете просто неявно преобразовать:

short value = ...;
double valueAsDouble = value;

... но я постараюсь не делать этого, если вам действительно не нужно.

...