你可以使用下面的PowerShell函数和Get-Content查看文件内容的16进制转储,即Get-Content -Encoding Byte 'MyFile.bin' | Format-HexDump
。转储一个 222 KB 的文件大约需要 23 秒,如果需要的话,输出可以重定向到一个文本文件,以便于检查转储。
$encodingAutoCompleter = {
param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters)
$availableEncodings = ([System.Text.Encoding]::GetEncodings() | Select Name, CodePage, DisplayName) + @( [PSCustomObject] @{ CodePage = '20127'; Name = 'ascii'; DisplayName = 'US-ASCII' }, [PSCustomObject] @{ CodePage = '1200'; Name = 'unicode'; DisplayName = 'Unicode' } )
$availableEncodings | ?{ $_.Name.StartsWith($wordToComplete) } | %{ New-Object System.Management.Automation.CompletionResult -ArgumentList $_.Name, $_.Name, 'ParameterValue', "$($_.DisplayName). Code Page $($_.CodePage)." }
}
function Format-BufferText([byte[]] $buffer, [System.Text.Encoding] $displayEncoding, [switch] $useControlPictures)
{
$bufferChars = $displayEncoding.GetChars($buffer);
$bufferText = (($bufferChars | %{ if ([char]::IsControl($_) -eq $true) { if ($useControlPictures -eq $false) { '.' } else { [char] ($_.ToInt16([cultureinfo]::InvariantCulture) + 0x2400) } } else { "$_" } }) -join "")
$bufferText
}
<#
.Synopsis
Displays binary data as a hexadecimal dump.
.Description
Displays binary data as a hexadecimal dump. Options are available to suppress displaying text and to display control characters
as Unicode Control Pictures instead of dots.
.Parameter Bytes
The bytes to be displayed.
.Parameter Encoding
The name of the text encoding to use. The default is ascii.
.Parameter NoTextDisplay
If specified the text display sidebar will be suppressed; otherwise, the display text sidebar will be present.
.Parameter UseControlPictures
If specified control characters will be displayed as Unicode Control pictures; otherwise, dots are used to represent control
characters.
.Example
Format-HexDump -Encoding unicode $bytes
.Example
Get-Content -Encoding Byte 'MyFile.bin' | Format-HexDump -Encoding unicode
.Example
0..255 | Format-HexDump -NoTextDisplay
#>
function Format-HexDump
{
[CmdletBinding()]
param
(
[Parameter(ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true)]
[byte[]] $Bytes,
[ValidateScript({ if (([System.Text.Encoding]::GetEncodings().Name + @('unicode', 'ascii')) -icontains $_) { return $true } else { Throw "Encoding must be one of the following: $([System.Text.Encoding]::GetEncodings().Name -join ', '), unicode, or ascii." } })]
[Parameter(ValueFromPipeline = $false)]
[string] $Encoding = "ASCII",
[Parameter()]
[switch] $NoTextDisplay,
[Parameter()]
[switch] $UseControlPictures
)
BEGIN
{
$displayEncoding = [System.Text.Encoding]::GetEncoding($Encoding)
$counter = 0
$hexRow = ""
[byte[]] $buffer = @()
}
PROCESS
{
foreach ($byte in $Bytes)
{
$buffer += $byte
$hexValue = $byte.ToString("X2")
if ($counter % 16 -eq 0)
{
$buffer = @($byte)
$hexRow = "$($counter.ToString("X8")): $($hexValue) "
}
elseif ($counter % 16 -eq 15)
{
if ($NoTextDisplay -eq $true)
{
$hexRow += "$($hexValue)"
$hexRow
}
else
{
$bufferText = Format-BufferText $buffer $displayEncoding $UseControlPictures
$hexRow += "$($hexValue) $($bufferText)"
$hexRow
}
}
else
{
$hexRow += "$($hexValue) "
}
$counter++
}
}
END
{
$counter--
if ($counter % 16 -ne 15)
{
$hexRow += " " * (((16 - $counter % 16) * 3) - 1)
if ($NoTextDisplay -eq $false)
{
$bufferText = Format-BufferText $buffer $displayEncoding $UseControlPictures
$hexRow += "$($bufferText)"
}
$hexRow
}
}
}
Register-ArgumentCompleter -CommandName Format-HexDump -ParameterName Encoding -ScriptBlock $encodingAutoCompleter
输出看起来像这样。
00000000: 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F ................
00000010: 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F ................
00000020: 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F !"#$%&'()*+,-./
00000030: 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F 0123456789:;<=>?
00000040: 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F @ABCDEFGHIJKLMNO
00000050: 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F PQRSTUVWXYZ[\]^_
00000060: 60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F `abcdefghijklmno
00000070: 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F pqrstuvwxyz{|}~.
00000080: 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F ????????????????
00000090: 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F ????????????????
000000A0: A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF ????????????????
000000B0: B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF ????????????????
000000C0: C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF ????????????????
000000D0: D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF ????????????????
000000E0: E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF ????????????????
000000F0: F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF ????????????????