1

コードに 10 進引数を入力する際に​​問題があります。

./a.out 650

単純に 10 進数値を 16 進数に変換し、リトルエンディアン形式で出力したいとします。

0A28

私の現在の解決策は、atoi を使用して char* を 10 進数に変換することでした (入力は 10 進数であると想定できます。エラーの場合は心配しません)。

int* を作成して char* にキャストできることを読みました。次のようになります。

char* bar = argv[1];
int* foo = (char*)&bar;

それを繰り返すことで必要な解決策が得られることを確認しましたが、それがどのように機能するかはよくわかりません。

4

2 に答える 2

2

これは、プログラムの最初のパラメーターを取得し、ビッグ エンディアンの 16 進数とリトル エンディアンの 16 進数として出力する必要があります。

int main(int argc, char *argv[]) {
  if (argc != 2) return -1;
  char *endptr;
  unsigned long d = strtoul(argv[1], &endptr, 10);
  if (*endptr) {
    printf("Not a decimal number '%s'\n", argv[1]);
    return 1;
  }
  printf("%lX\n", d);  // normal
  do {
   printf("%02hhX", (unsigned char) d);  // little endian first
    d >>= 8;
  } while (d);
  printf("\n");
  return 0;
}
于 2013-08-29T00:44:57.503 に答える