2015-11-19 2 views
0

Я пытался преобразовать приведенный ниже код C в Java. При этом я получаю исключение. Что я здесь делаю неправильно? Пожалуйста посоветуй.Исключение при преобразовании в десятичную строку hexa

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) 

Ниже приведен код С.

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 являются целыми массивами.

ответ

0

В сообщении 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))); 
+0

не статический метод в консоли. Поэтому я создал его как, Console c = null; с = System.Console(); Но объект c остается нулевым, и поэтому я получаю исключение с нулевым указателем. Как я могу назвать этот метод? – mayooran

+0

Я не думаю, что консоль будет работать для меня, поскольку для запуска JVM требуется консоль. Есть ли другие альтернативы? – mayooran

+0

@mayooran Как вы, вероятно, можете сказать, Java не моя сильная сторона; C есть. Сказав это, я изменил ответ, чтобы исправить эту ошибку. Что касается ошибки, что 'System.console()' 'null, то это не входит в вопрос, который вы задали, но если вы посмотрите [этот вопрос] (http://stackoverflow.com/questions/ 4203646/system-console-returns-null), вы можете найти ответ ... – Sebivor

Смежные вопросы