簡體   English   中英

如何將十六進制字符串轉換為雙精度?

[英]How to convert an hexadecimal string to a double?

我正在從BLE到我的手機a以String獲取范圍從0x0000到0x01c2的十六進制值。 為了將其繪制在圖形中,我必須將其轉換為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);
}

任何進一步的幫助將不勝感激。 提前致謝。

您的值不是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;

...但是除非您確實需要,否則我會盡量避免這樣做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM