查看文件的字节信息
对于前端工程师而言,很多时候需要和字符串
打交道;而对于后端和系统级开发工程师来说,很多时候则需要和字节
打交道。本篇分享几个查看文件字节的工具,由于我主要使用MacOS和Linux系统,所以,只介绍这两个平台的工具。
先介绍三种工具,它们一般都不需要安装,随操作系统开箱即用,第一款就是vi。
vi
vi作为老牌经典工具,基本上程序员都知道,但是,可能很多人并不知道它能够以二进制方式查看文件。
vi -b big.png
通过添加-b
参数,告诉 vi 以 binary mode
查看文件。但是,这种方式查看显示的信息并不方便阅读。
od
od, 即 octal, decimal, hex, ASCII dump
,这款工具非常推荐,它提供了丰富的选项和参数,使用起来也很方便,比如,要用一位十六进制格式查看big.png文件,只查看前18个字节:
od -t x1 -N 18 big.png
-t: 表示type,x1表示以一位
十六进制格式查看, -N表示长度。
输出结果如下:
0000000 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52
0000020 00 00
0000022
如果要看某个文件的最后两个字节,也可以:
od -t x1 -j 57490 factor.jpg
首先,查看factor.jpg的文件大小,为 57492 bytes,通过-j
跳过前面57490个字节,输出最后2个字节:
0160222 ff d9
0160224
最后两个字节为ff 和 d9,正是jpeg图片的EOI的值。
hexdump
第三款为 hexdump,这个和od的功能类似。
比如,要用一位十六进制格式查看big.png文件,只查看前18个字节:
hexdump -n 18 -C big.png
输出如下:
00000000 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52 |.PNG........IHDR|
00000010 00 00 |..|
00000012
这个和od得到的十六进制值是一样的,不过-C
表示用 hex + ASCII
来显示,双竖线中间显示的就是 ASCII字符。
如果不使用-C,而用-x,得到的结果是:
0000000 5089 474e 0a0d 0a1a 0000 0d00 4849 5244
0000010 0000
0000012
-x:每两个字节来显示。
用编程语言读取
除此之外,还可以使用编程语言来读取文件的字节信息,这里以Node.js
来展示:
import fs from 'fs/promises'
const buff = await fs.readFile('image/factor.jpg')
console.log(buff)
创建一个名称为util.mjs
的文件,内容如上,执行 node util.mjs
后,得到如下信息:
<Buffer ff d8 ff e0 00 10 4a 46 49 46 00 01 01 00 00 01 00 01 00 00 ff db 00 43 00 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 ... 57442 more bytes>
上面使用readFile
函数将文件读取为Buffer
类型,可以轻松查看其中的字节值。
小结
三款工具中,最推荐od,当然,你也可以安装专门的GUI工具来查看文件的字节值。相比专门的GUI工具,这几个工具的最大好处就是方便,开箱即用。很多时候,方便简洁,开箱即用,对用户体验来说非常非常重要,你不用浪费宝贵的时间来折腾无关的信息,直接打开电脑就能用,Enjoy code and life。