计算机中表示信息的最小单位是 bit(位),而用来存储数据的最小单位是 Byte(字节)。由于存储数据的最小单位是字节,因此文件长度不存在 4bit 或者 1bit 这种表示。编辑器
每次从文件读取 8bit 数据存储在 unsigned char 类型中,用 printf() 的 %x 参数打印;若是你想打印数据的二进制形式,只需对 unsigned char 类型数据进行8、十或十六进制转二进制字符串在打印便可。工具
表面上咱们的数据存储在 unsigned char 类型中,编辑的最小单位因该是 unsigned char,若是咱们想修改其中任意一位(bit),该如何操做呢?咱们举个例子:图片
二进制 0000 0000 的高位设置为 1 该怎么办? 二进制 0000 0000 的十六进制表示为 0; 二进制 1000 0000 的十六进制表示为 80; 因此只要将十六进制 80 存入文件,便高位设置为了 1。字符串
文件存储的最小单位是字节(Byte),不存在 4bit 或者 1bit 这种表示。咱们能够每次从文件读取 8bit 数据存储在 unsigned char 类型中,而后再相互比较两个数据便可。it
二进制数据用十六进制的方式表示,是由于十六进制最大值 F 恰好存储在 4bit 中,两个十六进制数就占用 1Byte 的空间。直观方便易于查阅和修改。旁边的 ASCII 字符区更可能是用来辅助阅览和编辑的。数据可视化
我建立了两个文件,分别各写入一个 int 值,下图是文件差别:基础
两个 int 的值是彻底不一样的,但他们的差别仅仅只有 1Byte 而已。也就是说这两个文件在磁盘中实际上只有一个字节不一样而已。变量
我向 b.bin 写入的数据。(a.bin 写入的是变量 a)可视化
b.c 文件是 HxD 导出的二进制数据。二进制
这是将 unsigned char rawData[] 写入文件(c.bin)后再读取的结果。 也就是说所谓类型对计算机而言是不存在的。
你可能注意到 HxD 的结果为 00 FF FF FF 个人结果为 FF FF FF 00,缘由在于我打印的是 int 型数据的十六进制形式。