news 2026/10/23 10:07:29

使用 PowerShell 的 Format-Hex 以16进制格式查看文件内容——《仓颉编程基础及应用》第12章配套实操

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
使用 PowerShell 的 Format-Hex 以16进制格式查看文件内容——《仓颉编程基础及应用》第12章配套实操
  • 示例工程
  • 教程

【免费下载链接】仓颉编程基础及应用_陈波_何睿_重庆大学

《仓颉编程基础及应用》,清华大学出版社,2025年9月第1版: 1. 随书源代码; 2. PPT; 3.在线扩展阅读资料。

项目地址:https://gitcode.com/Cangjie-SIG/Cangjie_Basics_Application
点击查看免费下载

本文围绕《仓颉编程基础及应用》配套文档"使用format-hex以16进制格式查看文件内容"展开,完整复现在 Windows PowerShell 下进入命令行、定位到随书第 12 章源文件目录、并以 16 进制格式查看article.txt内容的三步操作流程。结合仓库中 BookSourceCode/CH12 目录下的真实源文件与仓颉(Cangjie)示例代码,本文进一步解释Format-Hex输出中"偏移量列、十六进制字节列、ASCII 文本列"三列各自的含义,以及为什么 ASCII 文本文件能被第 3 列正确"翻译"而二进制文件不能,帮助读者建立起"程序眼中的文件"与"屏幕上的字节"之间的对应关系。

一、为什么用 Format-Hex:从"读文件"到"看字节"

第 12 章的主题是文本文件与二进制文件的读写。在仓颉代码里,File流读取到的是Array<Byte>,只有在调用String.fromUtf8之类的转换之后,这些字节才会变成人类可读的文本。也就是说,任何文件在磁盘上的本质都是字节序列,Format-Hex提供的正是绕过一切解析、直接观察原始字节的窗口。

本文的实操环境是一个 Windows 系统:

  • 需要查看的文件是article.txt,它是一个按 ASCII 编码的英文文本文件,位于D:\CJLearn\CH12目录下;
  • 从仓库结构看,D:\CJLearn\CH12正是本书第 12 章随书源码在 Windows 机器上的部署目录,对应仓库中的 BookSourceCode/CH12 目录。仓库中 PathDemo 示例 就直接把D:/CJLearn/CH12/article.txt作为绝对路径示例来使用,ERG 示例 也读取D:/CJLearn/CH12/ergcurve.dat,二者与本文操作的路径完全一致。

仓库中 article.txt 的内容起始于:

In the summer of 1922, Nick Carraway moves from Minnesota to work as a bond salesman in New York. ...

这是一个纯 ASCII 文本文件,因此用它来做Format-Hex演示非常合适:输出的第 3 列能够把每个字节还原为可读的英文字符,读者可以直观验证"十六进制字节 ↔ 文本"的映射关系。

二、进入 PowerShell

在 Windows 操作系统下,按下 Windows 徽标键(或按Win键打开开始菜单),输入PowerShell,然后用鼠标点击"最佳匹配"下的Windows PowerShell。

打开后的 Windows PowerShell 界面如下图所示(本例中当前路径为C:\Users\Alex,读者的计算机上当前路径可能不同):

说明:Format-Hex是 PowerShell 内置的格式化 cmdlet,随 Windows PowerShell 5.0 及以后的版本提供,无需额外安装。

三、定位到文件所在目录

由于作者需要查看的文件位于D:\CJLearn\CH12目录下,因此先执行下述命令将当前路径定位过去。在读者的计算机上,相关路径很可能不一样,请根据需要灵活变通。

作者依次录入并执行了下述命令(输入完每条命令后按下Enter键):

序号命令用途
1d:将当前盘符从 C 盘切换至 D 盘。如果读者要查看的文件位于 C 盘,则不需要执行该命令。
2cd CJLearn将当前目录切换至 D 盘根目录下的CJLearn子目录。cd意为changedirectory(改变目录)。
3cd CH12进一步切换至当前路径下的CH12子目录(截图所示)。
4dir显示当前路径下全部文件的列表。

执行dir后可以看到,article.txt位于D:\CJLearn\CH12目录下,其长度为4022 字节,与仓库中 BookSourceCode/CH12 目录下的同名文件内容一致。dir的输出包含Mode(属性)、LastWriteTime(最后修改时间)、Length(长度,单位字节)、Name(文件名)四列,其中d----表示目录,-a---表示普通文件。

一个小观察:仓库中的 article.txt 为 3971 字节,而 Windows 下测得 4022 字节,两者相差恰好 51 字节。从文件行数看(51 行)可以推断,Windows 侧副本的每行行尾是 CRLF(0D 0A,2 字节),而仓库中的副本行尾是 LF(0A,1 字节),51 行 × 1 字节 = 51 字节,与差值吻合。这也提醒读者:同一个文本文件在不同平台上的字节数可能因换行符表示方式不同而略有差异。

四、使用 Format-Hex 查看文件内容

在D:\CJLearn\CH12目录下执行命令:

format-hex article.txt

其中,article.txt可以替换成其它文件名。

Format-Hex的输出大体上分为三列:

| 列 | 内容 | 说明 | | -- | ---- | ---- | | 第 1 列 | 偏移量(地址) | 该行内容在文件中的起始位置,单位为字节,以 16 进制表示,如00000000、00000010(即十进制 16)。 | | 第 2 列 | 16 进制字节值 | 以 16 个字节为一行,逐字节显示其 16 进制值。输出顶部的00 01 02 ... 0F是该行内 16 个字节的列标(行内偏移)。 | | 第 3 列 | ASCII 文本 | 将每个字节按 ASCII 码解释为字符后得到的文本;不可打印的字节以.占位。 |

以截图中第一行数据为例逐字节解读:

00000000 49 6E 20 74 68 65 20 73 75 6D 6D 65 72 20 6F 66 In the summer of
  • 第 1 列00000000表示该行从文件开头(第 0 字节)开始;
  • 第 2 列49 6E 20 74 68 65 ...是 16 个字节的 16 进制值,其中49对应 ASCII 码 73(I),6E对应 110(n),20对应 32(空格);
  • 第 3 列In the summer of正是这些字节按 ASCII 码翻译出来的文本,与 article.txt 的开头In the summer of 1922, Nick Carraway...完全吻合。

继续观察后续行可以看到几个有代表性的字节:

  • 行尾处的0A就是换行符 LF(十进制 10),第 3 列中以.占位;
  • 31 39 32 32 2C对应文本1922,,说明数字和标点同样以 ASCII 码存储;
  • 第二行20 31 39 32 32 2C 20 4E 69 63 20翻译出来即1922, Nic,与文件第二行Nick rents a house...的衔接一致。

本例中,由于article.txt是按照 ASCII 码进行编码的文本文件,因此format-hex输出内容的第 3 列正确"解释"了文件内容。这正是选择 ASCII 文本文件做演示的原因:它让"十六进制字节 → 字符"的映射一目了然。

五、结合仓库源码理解"字节视图"

Format-Hex在屏幕上展示的,恰是仓颉程序读写文件时"先拿到字节、再解释含义"这一过程中最原始的那一步。对照仓库中第 12 章的几个示例,可以把三列输出放到代码语境中理解。

1. 文本读取:字节数组到字符串

TextRead 示例 的核心逻辑是:

let fi = FileInfo("textfile.txt") let data = Array<Byte>(fi.size, repeat: 0) // 按文件尺寸开辟字节缓冲区 let sizeReaded = f.read(data) // 从文件中读出原始字节 let s = String.fromUtf8(data) // 字节序列 → 字符串 print("读到${sizeReaded}字节的内容:\n${s}")

f.read(data)得到的data就相当于Format-Hex第 2 列展示的那串 16 进制字节,String.fromUtf8(data)做的事情则相当于第 3 列的"翻译"。对 ASCII 文件而言,fromUtf8与按 ASCII 解释结果一致,所以屏幕上是正常文本;这也解释了为什么文档中说第 3 列能正确"解释"article.txt的内容。

2. 二进制文件:第 3 列会"看不懂"

同样是第 12 章,PiWrite 示例 把Float32类型的圆周率以小端序写入 4 个字节,PiRead 示例 再用Float32.readLittleEndian还原:

let t = Array<Byte>(4, repeat: 0) let size = pi.writeLittleEndian(t) // 4 字节 f.write(t) // 二进制写入

ERG 示例 则读取 ergcurve.dat 这个 1600 字节的文件,每 4 字节解释为一个Float32小端样本,共 400 个样本,再写入 CSV。这类二进制文件如果也用format-hex查看,第 1、2 列仍然精确,但第 3 列的 ASCII 翻译大多是.占位或看似乱码的字符——因为它不是文本,强行按字符解释自然"解释不通"。两个方向的对照恰好印证了文档的结论:第 3 列是否可读,取决于文件本身的编码性质,而第 2 列的 16 进制值在任何情况下都是文件的真实内容。

3. 定位文件:与 Format-Hex 的前置步骤呼应

PathDemo 示例 使用Path类型区分绝对路径D:/CJLearn/CH12/article.txt与相对路径../article.txt,这与本文第三、四步中"先cd到目录、再对文件名执行format-hex"的操作逻辑是同一件事的不同层面:命令行里的"当前目录 + 文件名",对应程序里相对路径解析所依赖的工作目录(env.getWorkingDirectory())。

六、小结与延伸

  • Format-Hex是 PowerShell 观察文件原始字节最直观的手段,输出固定为三列:字节偏移量、16 字节一行的 16 进制值、ASCII 文本;
  • 查看前先切换到文件所在盘符与目录(d:、cd ...),用dir确认文件存在与字节数,再执行format-hex <文件名>;
  • 对 ASCII 文本文件(如本章的article.txt),第 3 列可直接读出文件内容;对pi.dat、ergcurve.dat这类二进制文件,只有第 2 列的 16 进制值具有直接意义,需要结合数据类型(如Float32小端序)自行"解码";
  • 延伸用法:Format-Hex同时也是一个通用格式化 cmdlet,可以接收来自管道或Get-Content -AsByteStream的字节流进行格式化显示(具体可用性取决于本机 PowerShell 版本),便于只查看文件开头若干字节而不必滚完整个文件。

通过这一实操,读者获得的不仅是一条命令的用法,更是"文件 = 字节序列"这一底层视角——这正是第 12 章文本与二进制文件读写全部内容的基石。

  • 示例工程
  • 教程

【免费下载链接】仓颉编程基础及应用_陈波_何睿_重庆大学

《仓颉编程基础及应用》,清华大学出版社,2025年9月第1版: 1. 随书源代码; 2. PPT; 3.在线扩展阅读资料。

项目地址:https://gitcode.com/Cangjie-SIG/Cangjie_Basics_Application
点击查看免费下载

相关推荐

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/17 15:52:29

CameraX与Zxing竖屏扫码:YUV数据转换与方向校正实战

1. 项目背景与整体设计思路 扫码功能在移动端应用里属于那种“看起来简单、做起来坑多”的典型模块。CameraX 是 Jetpack 家族里负责相机能力的库&#xff0c;Zxing 则是老牌的一维码/二维码解析库&#xff0c;两者组合是目前 Android 原生扫码方案里比较主流的一条路线。但真正…

作者头像 李华
网站建设 2026/10/17 22:37:45

采集周期拉长到分钟级之后(下):低频采集的容错设计与实现骨架

上篇讲了调度与补数,解决的是"数据怎么不断"。 本篇解决更隐蔽的一半:数据怎么不错。 一、容错让数据不要污染分析结果 上篇解决了"数据别断"。但断线是看得见的故障——监控处理会报警、看板会出现空洞。真正难处理的是另一类: 系统在正常采集,数据…

作者头像 李华
网站建设 2026/10/17 15:51:10

SOAOffice标准版部署实战:文档在线预览与转换避坑指南

简介&#xff1a;一套基于面向服务架构&#xff08;SOA&#xff09;的企业级办公软件正版资源包&#xff0c;面向企业信息化管理人员、系统集成商及需要部署协同办公平台的IT运维人员&#xff0c;主要解决文档集中管理、团队协作、审批流程自动化以及与ERP/CRM系统数据互通等问…

作者头像 李华
网站建设 2026/10/17 17:53:21

CAXA 3D 2025 实体设计课程建模作业笔记3

零件概述该零件为叉架类铸造零件 ——双底座斜撑连接板&#xff0c;整体轴测尺寸&#xff1a;总长 72mm&#xff0c;总宽 40mm&#xff0c;总高 30mm。零件由左右相互分离的两个安装底座与中间斜向镂空支撑板组合而成&#xff0c;属于课程典型综合建模案例&#xff0c;主要用于…

作者头像 李华
网站建设 2026/10/23 6:30:02

MATLAB红眼消除实战:HSV色彩空间与形态学算法详解

1. 红眼消除到底在做什么&#xff1a;从现象到数学本质拍完合照回看照片&#xff0c;发现每个人的瞳孔都泛着诡异的红光&#xff0c;像一群小恶魔——这个场景想必你我都遇到过。红眼现象的本质其实并不复杂&#xff1a;在暗光环境下&#xff0c;人眼瞳孔会自然放大&#xff0c…

作者头像 李华