Format-Hex
将文件或其他输入显示为十六进制。
语法
Format-Hex
[-Path] <String[]>
[-Count <Int64>]
[-Offset <Int64>]
[<CommonParameters>]
Format-Hex
-LiteralPath <String[]>
[-Count <Int64>]
[-Offset <Int64>]
[<CommonParameters>]
Format-Hex
-InputObject <PSObject>
[-Encoding <Encoding>]
[-Count <Int64>]
[-Offset <Int64>]
[-Raw]
[<CommonParameters>]
说明
Format-Hex
cmdlet 将文件或其他输入显示为十六进制值。 若要确定字符与输出的偏移量,请将行最左侧的数字添加到该字符的列顶部的数字。
Format-Hex
cmdlet 可以帮助你确定损坏的文件或可能没有文件扩展名的文件的文件类型。 可以运行此 cmdlet,然后读取十六进制输出以获取文件信息。
在文件中使用 Format-Hex
时,cmdlet 将忽略换行符,并返回一个字符串中保留换行符的文件的全部内容。
示例
示例 1:获取字符串的十六进制表示形式
此命令返回字符串的十六进制值。
'Hello World' | Format-Hex
Label: String (System.String) <2944BEC3>
Offset Bytes Ascii
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
------ ----------------------------------------------- -----
0000000000000000 48 65 6C 6C 6F 20 57 6F 72 6C 64 Hello World
将管道向下发送到 Format-Hex
cmdlet 的字符串 Hello World。
Format-Hex
的十六进制输出显示字符串中每个字符的值。
示例 2:从十六进制输出查找文件类型
此示例使用十六进制输出来确定文件类型。 该 cmdlet 显示文件的完整路径和十六进制值。
若要测试以下命令,请在本地计算机上创建现有 PDF 文件的副本,并将复制的文件重命名为 File.t7f
。
Format-Hex -Path .\File.t7f -Count 48
Label: C:\Test\File.t7f
Offset Bytes Ascii
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
------ ----------------------------------------------- -----
0000000000000000 25 50 44 46 2D 31 2E 35 0D 0A 25 B5 B5 B5 B5 0D %PDF-1.5..%????.
0000000000000010 0A 31 20 30 20 6F 62 6A 0D 0A 3C 3C 2F 54 79 70 .1 0 obj..<</Typ
0000000000000020 65 2F 43 61 74 61 6C 6F 67 2F 50 61 67 65 73 20 e/Catalog/Pages
Format-Hex
cmdlet 使用 Path 参数在当前目录中指定文件名,File.t7f
。 文件扩展名 .t7f
并不常见,但十六进制输出 %PDF
显示它是 PDF 文件。 在此示例中,Count 参数用于将输出限制为文件的前 48 个字节。
示例 3:设置不同数据类型数组的格式
此示例使用不同数据类型的数组来突出显示 Format-Hex
如何在管道中处理它们。
它将通过管道传递每个对象并单独处理。 但是,如果它是数值数据,并且相邻对象也是数值,它将将它们分组到单个输出块中。
'Hello world!', 1, 1138, 'foo', 'bar', 0xdeadbeef, 1gb, 0b1101011100 , $true, $false | Format-Hex
Label: String (System.String) <24F1F0A3>
Offset Bytes Ascii
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
------ ----------------------------------------------- -----
0000000000000000 48 65 6C 6C 6F 20 77 6F 72 6C 64 21 Hello world!
Label: Int32 (System.Int32) <2EB933C5>
Offset Bytes Ascii
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
------ ----------------------------------------------- -----
0000000000000000 01 00 00 00 72 04 00 00 � r�
Label: String (System.String) <4078B66C>
Offset Bytes Ascii
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
------ ----------------------------------------------- -----
0000000000000000 66 6F 6F foo
Label: String (System.String) <51E4A317>
Offset Bytes Ascii
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
------ ----------------------------------------------- -----
0000000000000000 62 61 72 bar
Label: Int32 (System.Int32) <5ADF167B>
Offset Bytes Ascii
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
------ ----------------------------------------------- -----
0000000000000000 EF BE AD DE 00 00 00 40 5C 03 00 00 ï¾-Þ @\�
Label: Boolean (System.Boolean) <7D8C4C1D>
Offset Bytes Ascii
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
------ ----------------------------------------------- -----
0000000000000000 01 00 00 00 00 00 00 00 �
参数
-Count
这表示要包含在十六进制输出中的字节数。
此参数是在 PowerShell 6.2 中引入的。
类型: | Int64 |
Position: | Named |
默认值: | Int64.MaxValue |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-Encoding
指定输入字符串的编码。 这仅适用于 [string]
输入。 该参数对数值类型没有影响。 输出值始终 utf8NoBOM
。
此参数的可接受值如下所示:
-
ascii
:对 ASCII(7 位)字符集使用编码。 -
ansi
:对当前区域性的 ANSI 代码页使用编码。 此选项已在 PowerShell 7.4 中添加。 -
bigendianunicode
:使用 big-endian 字节顺序以 UTF-16 格式进行编码。 -
bigendianutf32
:使用 big-endian 字节顺序以 UTF-32 格式进行编码。 -
oem
:对 MS-DOS 和控制台程序使用默认编码。 -
unicode
:使用 little-endian 字节顺序以 UTF-16 格式进行编码。 -
utf7
:采用 UTF-7 格式编码。 -
utf8
:采用 UTF-8 格式编码。 -
utf8BOM
:使用字节顺序标记(BOM) 以 UTF-8 格式进行编码 -
utf8NoBOM
:不带字节顺序标记的 UTF-8 格式编码(BOM) -
utf32
:采用 UTF-32 格式编码。
从 PowerShell 6.2 开始,编码 参数还允许注册代码页(如 -Encoding 1251
)或已注册代码页(如 -Encoding "windows-1251"
)的字符串名称的数字 ID。 有关详细信息,请参阅 Encoding.CodePage.NET 文档。
从 PowerShell 7.4 开始,可以使用 Encoding 参数的 Ansi
值来传递当前区域性的 ANSI 代码页的数字 ID,而无需手动指定它。
注意
UTF-7* 不再推荐使用。 从 PowerShell 7.1 起,如果为 Encoding 参数指定 utf7
,则会编写警告。
类型: | Encoding |
接受的值: | ASCII, BigEndianUnicode, BigEndianUTF32, OEM, Unicode, UTF7, UTF8, UTF8BOM, UTF8NoBOM, UTF32 |
Position: | Named |
默认值: | UTF8NoBOM |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-InputObject
指定要设置格式的对象。 输入包含对象或键入获取对象的命令或表达式的变量。
仅支持某些 标量 类型和 [system.io.fileinfo]
。
支持的标量类型包括:
-
[string]
,[char]
-
[byte]
,[sbyte]
-
[int16]
、[uint16]
、[short]
、[ushort]
-
[int]
、[uint]
、[int32]
、[uint32]
、 -
[long]
、[ulong]
、[int64]
、[uint64]
-
[single]
、[float]
、[double]
[boolean]
在 PowerShell 6.2 之前,Format-Hex
通过将所有类似对象组合在一起来处理具有多个输入类型的管道输入。 现在,它处理每个单独的对象,因为它通过管道,并且不会将对象组合在一起,除非像对象相邻一样。
类型: | PSObject |
Position: | Named |
默认值: | None |
必需: | True |
接受管道输入: | True |
接受通配符: | False |
-LiteralPath
指定文件的完整路径。 LiteralPath 的值与类型化完全相同。 此参数不接受通配符。 若要指定文件的多个路径,请使用逗号分隔路径。 如果 LiteralPath 参数包含转义字符,请将路径括在单引号中。 PowerShell 不会将单引号字符串中的任何字符解释为转义序列。 有关详细信息,请参阅 about_Quoting_Rules。
类型: | String[] |
别名: | PSPath, LP |
Position: | Named |
默认值: | None |
必需: | True |
接受管道输入: | False |
接受通配符: | False |
-Offset
这表示要从十六进制输出的一部分跳过的字节数。
此参数是在 PowerShell 6.2 中引入的。
类型: | Int64 |
Position: | Named |
默认值: | 0 |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-Path
指定文件的路径。 使用点(.
)指定当前位置。 接受通配符(*
),可用于指定位置中的所有项。 如果 Path 参数包括转义字符,请将路径括在单引号中。 若要指定文件的多个路径,请使用逗号分隔路径。
类型: | String[] |
Position: | 0 |
默认值: | None |
必需: | True |
接受管道输入: | False |
接受通配符: | True |
-Raw
此参数不再执行任何作。 它保留为脚本兼容性。
类型: | SwitchParameter |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
输入
可以通过管道将字符串传递给此 cmdlet。
输出
此 cmdlet 返回 ByteCollection。 此对象表示字节集合。 它包括将字节集合转换为字符串的方法,这些字符串的格式类似于 Format-Hex
返回的每行输出。 输出还表示正在处理的字节类型。 如果指定 Path 或 LiteralPath 参数,则对象包含包含每个字节的文件的路径。 如果传递字符串、布尔值、整数等,则会相应地标记它。
备注
PowerShell 包含以下 Format-Hex
别名:
- 所有平台:
fhx
最右侧的输出列尝试将字节呈现为 ASCII 字符:
通常,每个字节解释为 Unicode 码位,这意味着:
- 始终正确呈现可打印 ASCII 字符
- 多字节 UTF-8 字符永远不会正确呈现
- 仅当出现高阶字节时,UTF-16 字符才会正确呈现
NUL
。