2

I have a file with this content:

00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00   ................
00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00   ................
00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00   ................
00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00   ................
00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00   ................
00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00   ................
00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00   ................
00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00   ................
00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00   ................
00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00   ................
00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00   ................
00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00   ................
00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00   ................
00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00   ................
00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00   ................
00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00   ................
00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00   ................
00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00   ................
00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00   ................
00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00   ................
00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00   ................
00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00   ................
00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00   ................
00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00   ................
00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00   ................
00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00   ................
00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00   ................
00 00 00 00 00 00 00 00 - 2D 13 2D 13 00 00 00 00   ........-.-.....
00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00   ................
00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00   ................
00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00   ................
00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00   ................

I would like to create .bin file with with content. I tried this way:

$bytes = [byte]0xFF 
Set-Content -Path .\content.bin -Value $bytes -Encoding Byte

It created the bin file but when I try to check the hex with this way:

Format-Hex .\content.bin

It return this output:

00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F

00000000   FF 

My expectation result supposed to be like this:

    00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00   ................
    00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00   ................
    00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00   ................
    00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00   ................
    00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00   ................
    00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00   ................
    00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00   ................
    00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00   ................
    00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00   ................
    00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00   ................
    00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00   ................
    00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00   ................
    00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00   ................
    00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00   ................
    00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00   ................
    00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00   ................
    00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00   ................
    00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00   ................
    00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00   ................
    00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00   ................
    00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00   ................
    00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00   ................
    00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00   ................
    00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00   ................
    00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00   ................
    00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00   ................
    00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00   ................
    00 00 00 00 00 00 00 00 - 2D 13 2D 13 00 00 00 00   ........-.-.....
    00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00   ................
    00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00   ................
    00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00   ................
    00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00   ................

Anyone can give idea please. Thanks a lot.

3
  • Is this a question of how Format-Hex shows the bytes on screen? Commented Apr 14, 2022 at 9:33
  • Nope, I want to convert the hex to .bin file. I use Format-Hex to make sure the .bin file is correct or not @Theo Commented Apr 14, 2022 at 9:41
  • So to get this straight, you have a text dump showing the bin file as formatted hex characters and now you want to convert that back into a binary file? Then why bother with Format-Hex at all, because that does the exact opposite.. Commented Apr 14, 2022 at 9:47

1 Answer 1

3

Going by your comment I want to convert the hex to .bin file.

There are many applications that can do a hexdump of a binary file. PowerShell has the Format-Hex cmdlet for that, but it doesn't create output as you show in your question.
Format-Hex starts with a byte count header line

00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F

then an empty line and after that the hex data. It also adds a byte counter left margin before the actual data.

Your example doesnt do that, but instead adds a hyphen in between every eight bytes, so it is obviously not created using Format-Hex.

Anyway, here's how you can recreate a binary file from both types of hexdump output:

$inputFile  = 'D:\Test\yourHexdump.txt'
$outputFile = 'D:\Test\yourBinaryFile.bin'  # use absolute full path here
# if the output file already exists, delete it
if (Test-Path -Path $outputFile -PathType Leaf) { Remove-Item -Path $outputFile -Force }

# create a FileStream object to write the converted bytes to file
$stream = [System.IO.FileStream]::new($outputFile, [System.IO.FileMode]::Append, [IO.FileAccess]::Write)

# now loop through the file line-by-line and parse out the bytes
switch -Regex -File $inputFile {
    # if this is from Format-Hex output, ignore the 1-16 byte header and empty line(s)
    '^\s+00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F|^\s*$' {}  
    default { 
        # if this is from Format-Hex output, remove the byte counters in the left margin
        $line = if ($_ -match '^[0-9A-f]{8}\s') { $_.Substring(8) } else { $_ }
        # convert the hex values into an array of bytes
        [byte[]]$bytes = (($line.TrimStart() -split '\s{2,}')[0].Trim() -replace '-' -split '\s+' -ne '' -replace '^', '0X')
        # write to file
        $stream.Write($bytes, 0, $bytes.Count)
    }
}
# dispose of the stream
$stream.Flush()     # probably Dispose() also flushes..
$stream.Dispose()
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.