gpt4 book ai didi

java - 将十六进制答案转换为 Dec?

转载 作者:行者123 更新时间:2023-11-30 10:44:54 40 4
gpt4 key购买 nike

我需要一些帮助,将我从汽车中的 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 * 0,0625 - 512 中。它需要跳过前六个数字,否则答案将是错误的。

这在我的代码中看起来如何?

编辑:

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

编辑2:

我添加了更多代码以希望显示更多上下文。所有这些都在非 gui 类中。这个类处理所有与蓝牙相关的东西,而在我的另一个类“MainActivity”中处理 gui 等等。希望这可能会有所帮助。 OdbRawCommand ANS= new OdbRawCommand("22 40 28"); 这是来自 pires obd-java API .并且 OdbRawCommand 被用来发送自定义命令,就像我在这里所做的那样。这是OdbRawCommand contains .

编辑 3:

对于许多编辑感到抱歉。但是如果我修改了 API 中的 OdbRawCommand 类,它会起作用吗?由于 getFormattedResult 打印出它从汽车获得的原始答案。我可以编辑 API OdbRawCommand 类(如果可能)并执行类似的操作吗?但是从它的外观来看,文件已被锁定并且无法编辑?

enter image description here

@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 是十六进制的。

关于java - 将十六进制答案转换为 Dec?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37249947/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com