将hex答案转换为十二月?

我需要一些帮助,将我从汽车中的OBD适配器获得的答案转换为十进制,然后将转换后的任何值添加到公式并打印出来。

private class ConnectedThread extends Thread { private final InputStream mmInStream; private final OutputStream mmOutStream; private BluetoothSocket mmSocket; private ObdMultiCommand multiCommand; public ConnectedThread(BluetoothSocket socket) { connectionStatus = true; mmSocket = socket; InputStream tmpIn = null; OutputStream tmpOut = null; try { tmpIn = socket.getInputStream(); tmpOut = socket.getOutputStream(); } catch (IOException e) { Log.v("e", "e"); } mmInStream = tmpIn; mmOutStream = tmpOut; } public void run() { OBDcmds(); try { OdbRawCommand ANS= new OdbRawCommand("22 40 90"); while (!Thread.currentThread().isInterrupted()) { Log.d("Log", "ANS: " + ANS.getFormattedResult()); try { ANS.run(mmInStream, mmOutStream); } catch (InterruptedException e) { e.printStackTrace(); } } } catch (Exception e) { e.printStackTrace(); System.out.println("inside catch before while"); } } private void OBDcmds() { // execute commands try { new TimeoutCommand(100).run(mmInStream, mmOutStream); new EchoOffCommand().run(mmInStream, mmOutStream); new LineFeedOffCommand().run(mmInStream, mmOutStream); new SelectProtocolCommand(ObdProtocols.ISO_15765_4_CAN).run(mmInStream, mmOutStream); //ISO_15765_4_CAN guiHandler(Constants.TOAST, Constants.SHORT, "Init Done"); } catch (Exception e) { guiHandler(Constants.TOAST, Constants.SHORT, "Init Failed"); // handle errors } } } 

当被问到ANS时会返回类似“6240901F30”的内容,其中 6个数字与答案无关( 624090 1F30)。 所以我们剩下的是最后一个(在这种情况下)4个数字(1F30),它们是hex的,需要转换为十进制。 然后将该值添加到公式x * 0,0625 - 512 。 它需要跳过这六个第一个数字,否则答案是错误的。

怎么看我的代码?

编辑:

因此,6个数字后面的值会根据汽车电池的电流而变化(这就是这个命令的作用),并且因为它处于while循环中,所以我对解决方案的解决方案感到很失落。 其他命令只有3个需要计数的最后一个数字,因此在“计算”答案时,只需要忽略6个第一个数字。

编辑2:

我添加了一些代码以希望显示更多上下文。 所有这些都是非gui类。 这个类处理蓝牙相关的所有东西,在我的其他类“MainActivity”处理gui和什么不是。 希望这可能有点帮助。 OdbRawCommand ANS= new OdbRawCommand("22 40 28"); 这是来自pires obd-java API 。 并且OdbRawCommand用于发送自定义命令,就像我在这里做的那样。 这是OdbRawCommand包含的内容 。

编辑3:

对很多编辑感到抱歉。 但如果我修改了API中的OdbRawCommand类,它会工作吗? 因为getFormattedResult打印出来自汽车的原始答案。 我可以编辑API OdbRawCommand类(如果可能)并执行类似的操作吗? 但从它的外观来看,文件已锁定,无法通过编辑?

在此处输入图像描述

 @Override public String getFormattedResult() { int val = Integer.parseInt(getFormattedResult().substring(6), 16); //added this line return getResult(); } 

我今天没有车来测试这个,明天我会买的,但这会有用吗?

使用String#substring提取最后四位数(调用s ),然后是

Integer.parseInt(s, 16)

将其转换为整数。 16告诉解析器s是hex的。