繁体   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