Java 将十六进制答案转换为十二进制?

Java 将十六进制答案转换为十二进制?,java,android,obd-ii,Java,Android,Obd Ii,我需要一些帮助,将我从车内OBD适配器获得的答案转换为十进制,然后将转换后的值添加到公式并打印出来 private class ConnectedThread extends Thread { private final InputStream mmInStream; private final OutputStream mmOutStream; private BluetoothSocket mmSocket; private O

我需要一些帮助,将我从车内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个数字与答案无关(6240901F30)。所以我们剩下的是最后(在本例中)4个数字(1F30),它们是十六进制的,需要转换成十进制。然后将该值添加到公式
x*00625-512
。它需要跳过这六个第一个数字,否则答案将是错误的

在我的代码中会是什么样子

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

编辑2: 我添加了更多的代码,希望能显示更多的上下文。所有这些都在非gui类中。这个类处理所有与蓝牙相关的东西,在我的另一个类中,“MainActivity”处理gui等等。希望这会有所帮助<代码>OdbRawCommand ANS=新OdbRawCommand(“22 40 28”)这是来自。而
OdbRawCommand
正被用来发送自定义命令,就像我在这里所做的那样。这是我想要的

编辑3: 对不起,编辑太多了。但是如果我修改了API中的OdbRawCommand类,它会工作吗。因为
getFormattedResult
会打印出从车上得到的原始答案。我是否可以编辑API OdbRawCommand类(如果可能)并执行类似操作?但从外观上看,该文件已锁定,无法编辑

我今天没有车来测试这个,我明天就去买,但这行吗?

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

Integer.parseInt(s,16)


将其转换为整数。16告诉解析器
s
是十六进制。

这听起来很有希望!您能告诉我在我的代码中,或者在一些示例中,这会是什么样子吗?我想OP希望跳过前6位,而不管长度。@swess try
int val=Integer.parseInt(str.substring(6),16)@shmosel这可能是个愚蠢的问题哈。但是如果我把这行代码放进去,str应该是什么呢?谢谢:)@shmosel我添加了更多的上下文,请选中“编辑2:”。我忘了提到我正在使用的API。希望这能提供更多的上下文。
@Override
    public String getFormattedResult() {
        int val = Integer.parseInt(getFormattedResult().substring(6), 16); //added this line
        return getResult();
    }