十六进制int变量C

时间:2017-10-12 08:17:48

标签: c hex type-conversion zero

我将二进制转换为HEXA,但我需要带前导零的输出。我在这个函数中使用了这个数字 - > creat(outfile,hexa_num);从011101110111我将获得777但我需要0777.这是我的转换功能。有什么建议吗?

char bin_final[]="011101110111";

char *a = bin_final;
    int hexa_num = 0;
    do {
        int b = *a=='1'?1:0;
        hexa_num = (hexa_num<<1)|b;
        a++;
    } while (*a);

2 个答案:

答案 0 :(得分:3)

简单,只需使用strtoul()和常规snprintf(),无需重新发明任何内容。

const unsigned long number = strtoul("011101110111", NULL, 2);
char buf[16];
snprintf(buf, sizeof buf, "%04lx", number);
puts(buf);

打印

0777

当然,如果您想要始终只是打印它,您可以将最后三行折叠成:

printf("%04lx\n", number);

答案 1 :(得分:0)

您可以使用%04d: 0表示4位数的前导零。

e.g:

printf("%04d", hexanum);

如果您想在字符串中使用sprintf而不是printf。数字(int hexa_num)本身没有前导零,但您可以对其进行格式化,就像您的二进制数不是数字而是字符串一样。