任务一:用[0]和[1]绘图
- 在code.org上注册账号,完成与计算机像素相关的系列任务 (https://studio.code.org/s/pixelation)
- 先通过二进制的0和1 [画] 出一个图形进行分析:
我们选择Binary二进制编码,将图像宽度和高度都设置为4,通过图片和二进制编码,可以发现,每一个方块代表着一个二进制位。并且二进制1代表着白色方块,二进制0代表着黑色方块
- 尝试画出自己的名字
- 彩色像素
首先我们设置一个方格,选择每个像素的位数为24位,这也是RGB颜色标准,即每个像素红色、绿色、蓝色三个分量表示,设置每个像素的位数为24位,代表红、绿、蓝各占8位,我们知道每个二进制位可以取0或者1,那么8个二进制位组合能够有2的8次方,即256种组合,红黄蓝分量合成颜色就有256×256×256种。
我们在rbg颜色对照表中选择一个颜色分别用16进制编码和2进制编码来测试一下:
- 二进制存储图片文件底层原理:由上面的测试可以知道,每一个像素是可以通过二进制值表示出来的,图片文件存储实际上存的就是每一个像素对应的颜色值,同时还要存储文件类型、文件大小、图片宽度、图片高度等信息
任务二:掌握进制编辑器
- 安装Hex Editor Neo
- 新建txt 写入hello world,然后用编辑器打开
对照ASCII码表,在编辑器内修改数据并保存,然后打开txt看是否变化
- 修改图片内容:截一张8x8的png的白色图片,然后用编辑器打开
根据PNG文件的定义,从文件头开始的前8个字节数据是PNG文件的定义
下面是PNG文件数据块结构:
十六进制值 | 含义 |
---|---|
00 00 00 0d | 文件头数据长度 |
49 48 44 52 | 数据块类型标志,即IHDR |
00 00 00 08 | 图像宽度 |
00 00 00 08 | 图像高度 |
08 | 表示256色 |
02 | 表示索引图像 |
00 | 使用Deflate压缩编码压缩图像数据 |
00 | 为将来使用更好的压缩方法预留 |
00 | 非隔行扫描 |
4b 6d 29 dc | CRC字段 |
对png文件进行修改,发现更改后,图片变成黑色
扩展:修改游戏存档
- 用二进制编辑器修改《植物大战僵尸》的存档文件,能跳到指定关卡。
- 用二进制编辑器修改《植物大战僵尸》的存档文件,让游戏账户有指定数量的金币。
- 通过二进制编辑器修改存档文件,能解锁《植物大战僵尸》的[迷你游戏]选项。
- 通过二进制编辑器修改存档文件,能解锁《植物大战僵尸》的[生存模式]选项。
跳到指定关卡:
首先我们找到C盘中植物大战僵尸游戏存档:
选择显示隐藏的项目,然后可以看到ProgramData文件夹,进入之后点击PopCap Games,打开里面的PlansVsZombies中的userdata
用编辑器打开user1.dat
经过测试,发现第一行04列是控制冒险模式的关卡,十六进制0c表示十进制12,因为植物大战僵尸每个大关卡有10个小关卡,所以12代表2-2关。那么我想设置为第4-1关,十进制表示是31,转换成16进制数也就是1f
修改金币数量:
目前的金币数量是16140
通过收集金币让金币数量变为16230
通过对比可以发现第一行的0809列控制金币数量。并且16140和16230的最高两位不变,同时09列也没有变,所以09列控制的是最高两位,064e转换成10进制为1614,0657转换为10进制为1623,那么将金币数量转换为19100,对应的第一行0809列应改为:7607
生存模式解锁:
现在我的生存模式已经是解锁的,但当我将第一行的0c列修改为00时,生存模式变为没有解锁,再修改为01,发现生存模式成功解锁
自测
- 110101010001转十六进制是多少?
答:转16进制为d51 - 101011.101011对应的十进制数是多少?
答:43.671875 - 常见的音频编码格式有哪些?
答:PCM、WAV、MP3 - 常见的视频编码格式有哪些?
答:AVS、RMVB - 一个尺寸8×8大小的png全黑图片前四个字节的十六进制值是什么?
答:89 50 4e 47 - 如果要提供一个实时的流媒体服务器,除了ffmpeg,还需要使用哪个组件?
答:ffserver