用C写十六进制(字节)

用C写十六进制(字节),c,hex,byte,C,Hex,Byte,我必须将一个十六进制字节写入一个文件,但我有一个问题。比如说 如果我有: unsigned char a = 0x0; 我使用fwrite写入一个文件: FILE *fp = fopen("file.txt",wb); fwrite(&a,sizeof(unsigned char),1,fp); fclose(fp); 当我打开文件时,我总是看到20小时,为什么不是00小时 因此,我尝试使用: fprintf(fp,"%x",a); 在本例中,我看到0h,但我需要一个完整字节,而不

我必须将一个十六进制字节写入一个文件,但我有一个问题。比如说

如果我有:

unsigned char a = 0x0;
我使用fwrite写入一个文件:

FILE *fp = fopen("file.txt",wb);
fwrite(&a,sizeof(unsigned char),1,fp);
fclose(fp);
当我打开文件时,我总是看到20小时,为什么不是00小时

因此,我尝试使用:

fprintf(fp,"%x",a);
在本例中,我看到0h,但我需要一个完整字节,而不是半字节。
我该怎么办?

第一个例子很难相信,它应该生成一个单字节值为0的文件。这不是一个真正的文本文件,所以我想你的工具可能会愚弄你

第二种尝试更好,假设您想要一个文本文件,其中包含值的文本表示形式。要使其成为两个十六进制数字,请指定宽度和填充:

fprintf(fp, "%02x", a);

请注意,没有“十六进制值”这样的东西。价值就是价值;它可以表示为十六进制,但这不是值的一部分。100十进制与64进制和1100100二进制是一样的。只有当将数字表示为一串数字时,基数才起作用,数字本身不能是十六进制。

第一个例子很难相信,它应该生成一个包含值为0的单字节文件。这不是一个真正的文本文件,所以我想你的工具可能会愚弄你

第二种尝试更好,假设您想要一个文本文件,其中包含值的文本表示形式。要使其成为两个十六进制数字,请指定宽度和填充:

fprintf(fp, "%02x", a);

请注意,没有“十六进制值”这样的东西。价值就是价值;它可以表示为十六进制,但这不是值的一部分。100十进制与64进制和1100100二进制是一样的。只有当将数字表示为数字字符串时,基数才起作用,数字本身不能是十六进制。

您是在尝试向文件中写入一个零字节,还是ASCII字符串“00”或“00h”?请澄清您的意图。另外,您使用什么工具检查文件内容?十六进制编辑器?@dvnrrs我想写00h。在这种情况下,
fprintf(fp,“%02xh”,A)
是你想要的(基本上是@unwind的答案,但结尾有一个
h
。@StefanoSanfilippo我用记事本++检查,但我现在下载了一个十六进制编辑器,并用它打开文件,一切正常。。。怎么了?您是在试图向文件写入一个零字节,还是ASCII字符串“00”或“00h”?请澄清您的意图。另外,您使用什么工具检查文件内容?十六进制编辑器?@dvnrrs我想写00h。在这种情况下,
fprintf(fp,“%02xh”,A)
是你想要的(基本上是@unwind的答案,但结尾有一个
h
。@StefanoSanfilippo我用记事本++检查,但我现在下载了一个十六进制编辑器,并用它打开文件,一切正常。。。怎么了?