1

我有一个问题,我在我的代码中输入一个十进制参数:

./a.out 650

并想简单地将十进制值转换为十六进制并以小端格式输出:

0A28

我目前的解决方案是使用 atoi 将 char* 转换为十进制(我们可以假设输入是十进制的,不用担心错误情况)。

我读过我可以创建一个 int* 并将其转换为 char*,如下所示:

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

并且迭代它会产生我需要的解决方案,但我不太明白它是如何工作的。

4

2 回答 2

2

像这样:

#include <stdio.h>
#include <stdlib.h>

unsigned long int n = strtoul(argv[1], NULL, 0);
unsigned char const * p = (unsigned char const *)&n;

for (size_t i = 0; i != sizeof n; ++i)
    printf("%02X", p[i]);

要打印反向字节序,请使用sizeof n - i - 1.i

于 2013-08-29T00:34:19.487 回答
2

这应该采用程序的第一个参数并将其打印为大端十六进制数和小端十六进制数。

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 回答