我有一个问题,我在我的代码中输入一个十进制参数:
./a.out 650
并希望简单地将十进制值转换为十六进制并以小端格式输出:
0A28
我目前的解决方案是使用atoi将char *转换为十进制(我们可以假设输入是十进制的,不用担心错误情况)。
我已经读过我可以创建一个int *并将它转换为char *,类似这样:
char* bar = argv[1];
int* foo = (char*)&bar;
并且迭代它会产生我需要的解决方案,但我不太明白这是如何工作的。
答案 0 :(得分: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
。
答案 1 :(得分: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;
}