-2

Objective-C の場合:

皆さん、こんにちは。16 進数の入力を 2 進数に変換しようとしています。たとえば、誰かが次のように入力します。

A55

私はそれをに変換したい

101001010101

過去の投稿を調べてみましたが、どれもうまくいかないようです。どんな助けでも大歓迎です。

4

3 に答える 3

3

ルックアップテーブルを使用します。HEX表現には16文字しかありません。それぞれ、4文字のバイナリコードグループに対応します。HEXを文字ごとに調べ、ルックアップを取得して、結果のに入れNSStringます。

これがルックアップテーブルのコピーです。

0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
8 1000
9 1001
A 1010
B 1011
C 1100
D 1101
E 1110
F 1111

ルックアップの実行方法については、複数のオプションがあります。最も簡単な方法は、128要素の配列を作成し、文字のコードNSStringに対応する要素にsを配置することです (つまり、位置、、、、、、、、一重引用符で囲みます。これらは非常に重要です)。'0''1''E''F'

于 2013-03-05T01:49:08.977 に答える
1

これには組み込みの機能があると思います。そうでない場合は、少なくともhex-> dec、次にdec->binに移動できるはずです。

文字数がわかっている場合は、最初から変換を記述できます。binからhexは、アルゴリズム的には十分に一般的です。

于 2013-03-05T01:49:59.240 に答える
0

ルックアップ テーブル (16 進数のバイナリを取得するために 0 ~ 15 の値を指定できる配列) を作成します。

char *hex_to_bin[] = {
    "0000", "0001", "0010", "0011",
    /* ... */
    "1100", "1101", "1110", "1111"
};

そのテーブルには 16 個の要素があるはずです。複数の数字の変換プロセスでは、一度に 1 つの数字を処理し、結果ストレージの末尾に結果を追加します。

getchar()文字を読み取るために使用します。

int c = getchar();
if (c < 0) { puts("Error: Invalid input or premature closure."); }

strchr()取得する配列インデックスを決定するために使用します。

char *digits = "00112233445566778899AaBbCcDdEeFf";
size_t digit = (strchr(digits, c) - digits) / 2;

数字に対応するバイナリ値を検索します。

printf("%s", hex_to_bin[digit]); // You'll want to use strcat here.
于 2013-03-05T01:53:05.493 に答える