Quantcast
Viewing latest article 7
Browse Latest Browse All 14

Answer by JamieSee for How can I view the binary contents of a file natively in Windows 7? (Is it possible.)

You can use the PowerShell function below along with Get-Content to see a hexdump of the file contents, i.e., Get-Content -Encoding Byte 'MyFile.bin' | Format-HexDump. It takes about 23 seconds to dump a 222 KB file and, if desired, the output can be redirected to a text file to make examining the dump easier.

$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

Output looks like this:

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   @ABCDEFGHIJKLMNO00000050: 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   `abcdefghijklmno00000070: 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   ????????????????

Viewing latest article 7
Browse Latest Browse All 14

Trending Articles