我正在一个 class 项目中,我必须为我们在课堂上看的指令集构建一个两遍汇编器。
在首过函数中,我的代码段如下所示:
//If the fourth character is a comma, then it follows that the line contains a label.
if (line.indexOf(',') == 3) {
//Store symbol in address-symbol table together with value of location counter
String symbolTableLine = line.substring(0,3) + " " + String.format("%03X", Integer.toHexString(locCounter)) + "\r\n";
symbolTable[symbolTablePos] = symbolTableLine;
writerSymbTable.write(symbolTableLine);
//Increment the location counter and the current position in symbol table
locCounter++;
symbolTablePos++;
我的问题是以下函数调用:
String.format("%03X", Integer.toHexString(locCounter))
此操作的目标是将位置计数器转换为十六进制字符串(例如“AA”,“0”或“F”)并添加零作为占位符,直到十六进制字符串的长度为三位数(“0AA”,“000 “,” 00F“)
问题是我收到此异常:
Exception in thread "main" java.util.IllegalFormatConversionException: x != java.lang.String
我知道这意味着由于某种原因它没有采用十六进制字符串。但是我似乎无法弄清楚为什么它不是十六进制字符串,我的意思是我正在使用Integer.toHexString()...
任何帮助,将不胜感激,谢谢。如果此代码不足以让您看到,那么我可以根据需要发布更多代码。
最佳答案
您不需要调用toHexString()
,因为"X"
中的format()
将负责转换:
String.format("%03X", locCounter)