我将二进制转换为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);
答案 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
)本身没有前导零,但您可以对其进行格式化,就像您的二进制数不是数字而是字符串一样。