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
字符串 Hello World 将通过管道向下发送到 Format-Hex
cmdlet。 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 位)字符集使用编码。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
:不使用字节顺序标记 (BOM) 以 UTF-8 格式进行编码utf32
:采用 UTF-32 格式编码。
从 PowerShell 6.2 开始,Encoding 参数还允许注册代码页的数字 ID(如 -Encoding 1251
)或已注册代码页的字符串名称(如 -Encoding "windows-1251"
)。 有关详细信息,请参阅 Encoding.CodePage .NET 文档。
注意
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
时,UTF-16 字符才能正确呈现。