我从BLE到我的手机a得到范围为0x0000到0x01c2的十六进制值为String
。为了在图表中绘制它,我必须将其转换为double
,我已经尝试了this method但遗憾的是它在我的情况下无法帮助。
这是来自提供的链接的小修改代码:
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;
......但除非你真的需要,否则我会尽量避免这样做。