gpt4 book ai didi

java - 将 int 转换为十六进制字符串时出现异常

转载 作者:行者123 更新时间:2023-11-30 17:08:10 25 4
gpt4 key购买 nike

我试图将下面的 C 代码转换为 Java。我这样做时遇到以下异常。我在这里做错了什么?请指教。

Exception in thread "main" java.util.IllegalFormatConversionException: x != java.lang.String
at java.util.Formatter$FormatSpecifier.failConversion(Unknown Source)
at java.util.Formatter$FormatSpecifier.printInteger(Unknown Source)
at java.util.Formatter$FormatSpecifier.print(Unknown Source)
at java.util.Formatter.format(Unknown Source)
at java.util.Formatter.format(Unknown Source)
at java.lang.String.format(Unknown Source)
at com.kube.rfidscannertest.MainScannerTest.printEpc(MainScannerTest.java:68)
at com.kube.rfidscannertest.MainScannerTest.main(MainScannerTest.java:42)

下面是 C 代码。

printf("%04X", (((epc[i] & 0xFF00) >> 8) | ((epc[i] & 0xFF) << 8)));

下面是我尝试将其转换为 Java 的方法。

String.format("%04X ", Integer.toHexString((((data[i] & 0xFF00) >> 8) | ((data[i] & 0xFF) << 8))).replace(' ', '0')).concat(strData);

请注意,epc 和 data 是整数数组。

最佳答案

formatter manual声明 %x 格式委托(delegate)“将​​参数格式化为以 16 为基数的整数。”

换句话说,String.format 期望 %04X 对应于整数参数。然而,你的论点是一个字符串......而这种差异正是你的异常试图告诉你的。

也许你的意思是:

String.format("%04X", (((data[i] & 0xFF00) >> 8) | ((data[i] & 0xFF) << 8)))

请注意,这仍然表现得明显不同,因为 C 版本将输出直接打印到 stdout,而 Java 版本则不然。

我怀疑您打算使用Java.io.Console.format,而不是String.format,例如:

import java.io.Console;
System.console().format("%04X", (((data[i] & 0xFF00) >> 8) | ((data[i] & 0xFF) << 8)));

关于java - 将 int 转换为十六进制字符串时出现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33796475/

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