Objective-C の場合:
皆さん、こんにちは。16 進数の入力を 2 進数に変換しようとしています。たとえば、誰かが次のように入力します。
A55
私はそれをに変換したい
101001010101
過去の投稿を調べてみましたが、どれもうまくいかないようです。どんな助けでも大歓迎です。
Objective-C の場合:
皆さん、こんにちは。16 進数の入力を 2 進数に変換しようとしています。たとえば、誰かが次のように入力します。
A55
私はそれをに変換したい
101001010101
過去の投稿を調べてみましたが、どれもうまくいかないようです。どんな助けでも大歓迎です。
ルックアップテーブルを使用します。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'
これには組み込みの機能があると思います。そうでない場合は、少なくともhex-> dec、次にdec->binに移動できるはずです。
文字数がわかっている場合は、最初から変換を記述できます。binからhexは、アルゴリズム的には十分に一般的です。
ルックアップ テーブル (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.