c - 十六进制 int 变量 C 中的前导零

标签 c hex type-conversion zero

我将二进制转换为十六进制,但我需要带有前导零的输出。我在这个函数中使用这个数字 -> 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);

最佳答案

很简单,只需使用 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);

关于c - 十六进制 int 变量 C 中的前导零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46704693/

相关文章:

java - 二进制加法执行类型边界检查,而速记和递增则不执行

rust - 如何在不制作任何副本的情况下将 bytes::Bytes 转换为 &str?

c - 使用用户输入元素声明数组

ios - 如何渐变位置在 iOS 中工作?

string - 将 ASCII 转换为十六进制

c - 而不是打印二进制数,我如何将它存储为变量?

将 sha 256 哈希转换为 c 中的数字

C - 何时使用指针算术,何时使用数组索引?

c - 动态分配并返回局部变量

c - 按字符串长度对动态分配的字符串数组进行 Qsort