1

今日、私はファイルを読み込んで情報を抽出しています。私はほとんどすべてを理解しましたが、何らかの理由で非常に厄介な問題が発生しています! 行全体を読み取り、.split() コマンドを使用して「文」を「単語」に分割しますよね? そして、「単語」を次のようにエイリアスします。

startAddress = line[ 0 ]
length = line[ 2 ].strip( "(" ).strip( ")" )
...
endAddress = startAddress + length

注: データ ファイルでは () で囲まれているため、長さを取り除きます。() はネガとして使用されるため、後で .csv ファイルに読み込むときに問題が発生します。

とにかく、0x00230008 を開始アドレス、(4) を長さにすると、プログラムは 0x00230008C ではなく 0x002300084 を終了アドレスにしますが、hex(length) または hex(startAddress) または hex(str (length) または hex(str(startAddress)) 16 進数を 16 進数に変換できないというエラーがスローされます。同様に、それらを整数に変換することもできません。

本当に、私がする必要があるのは、開始アドレス (16 進数ですが、文字列として読み込まれます) と長さ (int で int として読み込まれます) を追加することだけです。動作しません。ラインもやってみた

endAddress = startAddress + length - 1

これは、「サポートされていない -: 'str' および 'int' のオペランド型」を教えてくれるので、できる限りいじりましたが、これを理解していません。ストリップを介して 16 進数値の前にある 0x を削除することを考えていましたが、整数として読み込まれ、正しくありません。

最後に試したのは、line[ 0 ] と line[ 2 ] (ストリップ付き) を直接使用して endAddress を検索することでしたが、すべて同じエラーが発生します。startAddress = 0xFFFFFFFF を行 [ 0 ] に割り当てる前に、型を強制しようとしましたが、うまくいきませんでした。では、16 進数ではないのに 16 進数であると不平を言う場合、文字列を 16 進数に変換するにはどうすればよいでしょうか。それとも、それらを追加する方法が間違っているのでしょうか? 他の追加方法を使用できますか?

私にとっての最大の混乱は、startAddress を文字列に変換してから 16 進数に戻そうとしても、まだエラーが発生することです。

4

4 に答える 4

1

文字列をbase-16 intとして解析する必要があります

>>> int("0x00230008", 16)
2293768

int を追加する

>>> int("0x00230008", 16) + 4
2293772

そして、それを 16 進文字列に変換します。

>>> hex(int("0x00230008", 16) + 4)
'0x23000c'

hex必要に応じて、ゼロを埋め込む代わりに、文字列の書式設定を使用する必要があります。

>>> '0x%08x' % (int("0x00230008", 16) + 4)
'0x0023000c'
于 2013-07-29T21:41:48.983 に答える