c - 用C写十六进制(字节)

标签 c hex byte

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

如果我有:

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,但我需要一个完整的字节,而不是一个半字节。 我该怎么办?

最佳答案

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

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

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

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

关于c - 用C写十六进制(字节),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21682441/

相关文章:

c++ - Linux X-Server 编程资源

java - 如何定义unix权限常量(READ、WRITE、EXECUTE)

string - 转换十六进制字符串的问题(在 Lua 中)

javascript - 在javascript中将 float 转换为字符串

c - 计算字符串中空格、制表符和换行符数量的程序

c - 无线 NIC 如何在硬件级别和功能上工作?

c++ - 访问 dlopen 标志

bash - Shell脚本中的十六进制到十进制

c - 将二进制数据(从文件)读入结构

java - 如何在java中转换一个包含0的字节中用false初始化的bitSet