【问题标题】:Write Hex in C (byte)用 C 写十六进制(字节)
【发布时间】:2014-03-08 02:14:17
【问题描述】:

我必须将一个十六进制字节写入文件,但我遇到了问题。例如。

如果我有:

unsigned char a = 0x0;

我使用 fwrite 写入文件:

FILE *fp = fopen("file.txt",wb);
fwrite(&a,sizeof(unsigned char),1,fp);
fclose(fp);

当我打开文件时,我总是看到 20h,为什么不是 00h?

所以,我尝试使用:

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

在这种情况下,我看到 0h,但我需要一个完整的字节,而不是半字节。 我该怎么办?

【问题讨论】:

  • 您是在尝试将单个零字节写入文件,还是 ASCII 字符串“00”或“00h”?请说明您的意图。
  • 另外,您使用什么工具来检查文件的内容?十六进制编辑器?
  • @dvnrrs 我想写00h。
  • 在这种情况下,fprintf(fp, "%02xh", a); 就是你想要的(基本上是@unwind 的答案,但最后是h)。
  • @StefanoSanfilippo 我用 Notepad++ 进行检查,但我现在下载了一个十六进制编辑器并用它打开文件,一切正常......怎么了?

标签: c hex byte


【解决方案1】:

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

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

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

请注意,没有“十六进制值”之类的东西。一个值就是一个值;它可以表示为十六进制,但这不是值的一部分。十进制的 100 与十六进制的 64 和二进制的 1100100 相同。基数仅在将数字表示为数字字符串时才重要,数字本身不能“是十六进制”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-24
    • 2015-08-08
    • 2019-10-13
    • 2017-09-13
    • 2011-10-28
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多