【发布时间】:2019-08-13 05:23:54
【问题描述】:
我将 0x0000 到 0x01c2 范围内的十六进制值从 BLE 获取到我的手机 a 为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);
}
任何进一步的帮助将不胜感激。提前致谢。
【问题讨论】:
-
如果您只有从 0x0000 到 0x01c2 的值,听起来这不是 IEEE-754 编码的
double值。您希望结果为 0 是什么?您希望 0x01c2 的结果是什么? 0x0100 呢? -
如果这些值是 0-450 范围内的值,您应该将它们解析为
int或short值。如果你真的需要,你可以随时投到double。 -
您的代码是从那里复制粘贴的:stackoverflow.com/a/10708508/5529263 对吗?
-
@JonSkeet 0x0000 - 0(int), 0x01c2 - 450(int) 和 0x0100 - 256(int)
-
对,所以你不应该调用
Double.longBitsToDouble,因为你的十六进制不代表一个IEEE-754浮点值——它只是一个整数。跨度>
标签: java android string hex double