十六进制int变量C中的前导零
我将二进制转换为十六进制,但我需要带前导零的输出。我在这个函数->create(outfile,hexa_num)中使用这个数字;从0111011110111我将得到777,但我需要0777。这是我的转换函数。有什么建议吗十六进制int变量C中的前导零,c,hex,type-conversion,zero,C,Hex,Type Conversion,Zero,我将二进制转换为十六进制,但我需要带前导零的输出。我在这个函数->create(outfile,hexa_num)中使用这个数字;从0111011110111我将得到777,但我需要0777。这是我的转换函数。有什么建议吗 char bin_final[]="011101110111"; char *a = bin_final; int hexa_num = 0; do { int b = *a=='1'?1:0; hexa_num = (hex
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);
char bin_final[]=“01101110111”;
char*a=本_最终版本;
int hexa_num=0;
做{
INTB=*a=='1'?1:0;
hexa_num=(hexa_num您可以使用%04d:
0表示前导4位零
e、 g:
如果你想把它放在字符串中,可以使用sprintf
而不是printf
。数字(int hexa_num
)本身没有前导零,但你可以格式化它,就像你的二进制数不是作为数字而是作为字符串一样。简单,使用方便,规则,无需重新发明任何东西
const unsigned long number = strtoul("011101110111", NULL, 2);
char buf[16];
snprintf(buf, sizeof buf, "%04lx", number);
puts(buf);
这张照片
0777
当然,如果您想一直打印,您可以将最后三行折叠为:
printf("%04lx\n", number);
您是否尝试过用前导零打印它?例如,printf(“%04x\n”,hexa_num”)
?此外,您并没有真正转换为十六进制。您将带有二进制数字的字符串转换为二进制格式的值。在二进制计算机上(现在几乎所有的计算机都是这样)所有值都以二进制形式存储。十六进制、十进制或八进制只是表示二进制值的方式。在C
中不可能在存储值时添加额外的零,但可以在打印值时添加这些零。请参阅C中的格式说明符代码段将字符串转换为二进制,但问题是如何将二进制转换为二进制字符串。有人很困惑,不太确定是我。最后,如果要转换的字符串是空的?或者包含非二进制数字怎么办?第一个问题是使用while
循环而不是do while
。第二个问题是通过检查字符并适当地处理错误来解决的。所以现在我把这个数字用字符表示[]以及如何将其转换为int,因为creat使用int标志。第一行调用strtoul()
将二进制字符串转换为无符号长整数。如果您只需要这些,那么您的问题就非常复杂了。现在我有0777个buf。但我需要将buf转换为int creat(const char*path,mode\u t mode)它不需要char,如果我将buf转换为int,我将得到777而不是0777。希望现在它更清楚。@KuboBrehuv——它一点也不清楚;如果create()
接受一个int
参数,向其传递一个int
值。无需使用十六进制字符串表示。打印数字时,前导零是数字显示方式的一部分;内部与777
和0777
关联的数字是相同的。在“create”(“filename”,0777)之后'文件权限将是-rwxrwx,但如果create(“filename”,777)'权限是-r---x--t,这就是为什么我需要第一个零。
printf("%04lx\n", number);