Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
十六进制int变量C中的前导零_C_Hex_Type Conversion_Zero - Fatal编程技术网

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

十六进制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

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