【问题标题】:Exception while converting into to hexa decimal string将 int 转换为十六进制字符串时出现异常
【发布时间】:2016-02-21 03:47:10
【问题描述】:

我试图将以下 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 是整数数组。

【问题讨论】:

    标签: java c string exception hex


    【解决方案1】:

    formatter manual 声明%x 格式委托“将​​参数格式化为以十六进制为底的整数。”

    换句话说,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)));
    

    【讨论】:

    • format 不是 Console 中的静态方法。因此我创建了它,控制台 c =null; c=System.console();但是对象 c 仍然为空,因此我得到一个空指针异常。如何调用该方法?
    • 我不认为控制台对我有用,因为它似乎在 JVM 启动时需要一个控制台。还有其他选择吗?
    • @mayooran 您可能会说,Java 不是我的强项。 C是。话虽如此,我已经修改了答案以纠正该错误。至于System.console()null 的错误,嗯,这不是您提出的问题的一部分,但如果您查看this question,您可能会找到答案...
    • @mayooran 这似乎暗示System.console()null,因为您在Eclipse 中将它作为Windows 程序(而不是控制台程序)启动。如果您编译为 Windows 程序并尝试使用 printf...,C 中也会存在同样的问题,但它不会是例外; printf 只会返回一个错误代码。
    猜你喜欢
    • 1970-01-01
    • 2020-07-18
    • 1970-01-01
    • 2019-01-10
    • 2019-01-02
    相关资源
    最近更新 更多