0

ファイルを開いて16進数を入力するCコードがあります。次に、取得した数値を別の1桁の16進数に追加し、最終的に数値を16進数で表示します。例:AC65E1 と入力し、それに E を追加して AC65EF を表示します。

10進数への変換を経ずに10進数を追加してから16進数に戻す方法はありますか? いいえの場合、時間的に最適な方法は何ですか?

編集:私の質問は誤解されていると思います.Hexで「+」を使用できるかどうか知りたいですか?できなかった場合は、10 進数に変更して「+」演算子を使用する必要があります。誤字脱字すみません!

今、ファイルから char hex_num[10]; にデータを読み込んでいます。

4

5 に答える 5

3

実際、コンピューターはすべての作業を 2 進数で行うため、生の 16 進数で演算を行うよう強制するために大量の無意味な努力をしたくない場合を除き、数値を解析して加算し、レンダリングする必要があります。結果は 16 進数として再び出力されます。

unsigned int value1, value2;
fscanf(fp, "%x %x", &value1, &value2)

unsigned int result = value1 + value2;
printf("%x\n", result);
于 2011-03-02T14:30:58.260 に答える
2

C やその他の言語の数学は、特定のベースで行われるわけではありません。もちろん、バイナリで行われる処理の最下位レベルを除きます。

Eに追加しAC65E1て..を取得したいので、あなたの質問は壊れていると思いますAC65E1。おそらくあなたはAC65EF.

ファイルからデータを読み取り、数値のように見える文字列を整数に解析し、演算を実行してから、希望する表現で再度出力することをお勧めします。

このためには、パラメータとしてstrtol渡すか、最初に整数に読み込みます。16basefscanf

于 2011-03-02T14:32:55.390 に答える
1

紙に自然にこれを行うのと同じ方法で、文字ごとの加算器を書くことができます。つまり、最後の桁 '1' +'E' ='F'、キャリーなしなどを比較します。

ただし、16進数で解析するコードが効率的であり(10進数よりもはるかに簡単である)、数値が1つまたは2つのマシンレジスタに収まるほど小さいと仮定すると、それほど効率的ではない可能性があります。 1000桁以上の16進文字列の場合、文字ごとの方法が最も簡単な場合があります。

そして、いずれにせよ、これらはファイルから読み取られます。IOは追加よりもはるかに遅くなります。したがって、追加のパフォーマンスの最後のビットについては心配しません。

于 2011-03-02T14:38:25.343 に答える
1

これはあなたが望むものですか: http://www.ehow.com/how_7529899_read-hex-file-ansi-c.html

于 2011-03-02T14:32:18.120 に答える
0

あなたは少し混乱しているようです。

もしあなたがそうするなら:

int a = 43, b = 12;

printf("%d+%d=%d\n", a, b, a + b);

コンピューターは「10 進数での加算」を行っていません。加算はバイナリで行われ、リテラルの場合はコンパイル時に、出力の場合は実行時に 10 進テキストに変換されます。

単にstrtol数値を解析するために使用するか、 またはsscanf()を追加する必要があります。

「16 進数で追加する」テキストベースのルーチンを手動で作成することは、決して良いことではありません。

于 2011-03-02T14:31:46.810 に答える