转换为十六进制十进制字符串时出现异常

时间:2015-11-19 06:11:05

标签: java c string exception hex

我试图将下面的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和数据是整数数组。

1 个答案:

答案 0 :(得分:0)

formatter manual表示i%colors.length格式委托“将​​参数格式化为十六进制的整数。”

换句话说,%x期望String.format对应于整数参数。但是,你的论点是一个字符串...而且这种差异是你的例外试图告诉你的。

也许你的意思是:

%04X

请注意,这仍然会有明显的不同,因为C版本直接将输出打印到String.format("%04X", (((data[i] & 0xFF00) >> 8) | ((data[i] & 0xFF) << 8))) ,而Java版本则没有。

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

String.format