Formatting powershell Get-Content byte code from file

79 Views Asked by At

I am able to get the byte code but 2 things I am trying to do here is

  1. format the bytecode so that there are 2 digits per byte. The leading zeroes are excluded.
  2. Remove spaces between the bytes themselves because they are taking up a lot of space.
gc -Raw -encoding byte "c:\picture.jpg" | % {write-host ('{0:x}' -f $_) -noNewline};

tried trim() but not sure if that is possible or where to put it.

1

There are 1 best solutions below

3
mklement0 On BEST ANSWER

The simplest - and most efficient - solution is to use .NET APIs:

In Windows PowerShell, use System.BitConverter.ToString, and remove the resulting - separators afterwards:

[System.BitConverter]::ToString(
  (Get-Content -Raw -Encoding Byte c:\picture.jpg)
) -replace '-'

In PowerShell (Core) 7+, use System.Convert.ToHexString, which directly yields the desired format:

[System.Convert]::ToHexString(
  (Get-Content -Raw -AsByteStream c:\picture.jpg)
)

Note:

  • In principle, the Windows PowerShell solution also works in PowerShell (Core), if it weren't for the frivolous syntactic change from -Encoding Byte to -AsByteStream that occurred between the two PowerShell editions - see GitHub issue #7986.