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>]
Description
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 位) 字元集的編碼方式。 -
ansi
:針對目前文化特性的 ANSI 代碼頁,使用 的編碼方式。 此選項已在PowerShell 7.4中新增。 -
bigendianunicode
:使用 big-endian 位元組順序以 UTF-16 格式編碼。 -
bigendianutf32
:使用 big-endian 位元組順序以 UTF-32 格式編碼。 -
oem
:使用 MS-DOS 和控制台程序的預設編碼方式。 -
unicode
:使用位元組順序以UTF-16格式編碼。 -
utf7
:以UTF-7格式編碼。 -
utf8
:以UTF-8格式編碼。 -
utf8BOM
:使用位元組順序標記以 UTF-8 格式編碼(BOM) -
utf8NoBOM
:以 UTF-8 格式編碼,不含位元組順序標記 (BOM) -
utf32
:以UTF-32格式編碼。
從 PowerShell 6.2 開始,編碼 參數也允許已註冊代碼頁的數值識別元(例如 -Encoding 1251
)或已註冊代碼頁的字串名稱(例如 -Encoding "windows-1251"
)。 如需詳細資訊,請參閱 Encoding.CodePage的 .NET 檔。
從 PowerShell 7.4 開始,您可以使用 Encoding 參數的 Ansi
值,傳遞目前文化特性 ANSI 代碼頁的數值標識符,而不需要手動指定。
注意
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
會將所有類似物件群組在一起,來處理具有多個輸入類型的管線輸入。 現在,它會在通過 Pipeline 時處理每個個別物件,除非類似物件相鄰,否則不會將物件群組在一起。
類型: | 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
。