4

私は、クラスで見ていた命令セット用の 2 パス アセンブラを構築する必要があるクラス プロジェクトに取り組んでいます。

最初のパス関数では、コードの一部は次のようになります。

        //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))

この目的は、ロケーション カウンターを 16 進数の文字列 ("AA"、"0"、または "F" など) に変換し、16 進数の文字列が 3 桁の長さ ("0AA"、"000") になるまで、プレースホルダーとしてゼロを追加することです。 "、"00F")

問題は、私がこの例外を受け取っていることです:

 Exception in thread "main" java.util.IllegalFormatConversionException: x != java.lang.String

これは、何らかの理由で 16 進数の文字列を取り込んでいないことを意味します。しかし、なぜそれが16進数の文字列にならないのか理解できないようです。つまり、Integer.toHexString()を使用していることを意味します...

どんな助けでも感謝します、ありがとう。これだけのコードでは不十分な場合は、必要に応じてさらに多くのコードを投稿できます。

4

1 に答える 1

7

inが変換を処理するtoHexString()ので、呼び出す必要はありません。"X"format()

String.format("%03X", locCounter)
于 2013-03-21T19:33:43.470 に答える