【问题标题】:Read/Parse Binary files with Powershell使用 Powershell 读取/解析二进制文件
【发布时间】:2012-05-20 08:54:38
【问题描述】:

我正在尝试解析一个二进制文件,我需要一些关于去哪里的帮助。我一直在网上寻找“解析二进制文件”、“读取二进制文件”、“读取二进制文件中的文本”等,但我没有任何运气。

例如,我如何从这个二进制文件中读取这个文本?任何帮助将非常感激。我正在使用 powershell。

【问题讨论】:

  • 运行 [System.IO.File]::ReadAllBytes 时得到的数字是多少?我尝试创建一个空文本文件,然后通过 [System.IO.File]::ReadAllBytes 读取它。输出为:255 254 13 0 10 0� ~

标签: parsing powershell binary


【解决方案1】:

您似乎有一个二进制文件,其文本位于固定或可推断的位置。 Get-Content 可能会对您有所帮助,但是...它会尝试将整个文件解析为字符串数组,从而创建一个“垃圾”数组。此外,您不会知道特定“字符绳”是从哪个文件位置开始的。

您可以尝试使用 .NET 类 File 进行读取,并尝试使用 Encoding 进行解码。每次调用只需一行:

# Read the entire file to an array of bytes.
$bytes = [System.IO.File]::ReadAllBytes("path_to_the_file")
# Decode first 12 bytes to a text assuming ASCII encoding.
$text = [System.Text.Encoding]::ASCII.GetString($bytes, 0, 12)

在您的实际情况下,您可能会在循环中遍历字节数组,查找特定字符串序列的开始和结束,并使用这些索引来指定要从中提取文本的字节范围 @ 987654324@.

我提到的 .NET 方法在 .NET Framework 2.0 或更高版本中可用。如果您安装了 PowerShell 2.0,那么您已经拥有它。

【讨论】:

  • 顺便说一句,您可以使用以下命令将字节转换回文件:[System.IO.File]::WriteAllBytes($outputPath, $bytes)
【解决方案2】:

如果您只是在寻找字符串,请查看 SysInternals 的 strings.exe 实用程序。

【讨论】:

    【解决方案3】:

    您可以通过 Get-Content -Encoding byte 读取文件。我不确定如何解析它。

    【讨论】:

    • technet.microsoft.com/en-us/library/hh849787.aspx 不会在任何地方将编码列为有效标志。
    • 编码用于文本文件,会破坏二进制文件。
    • @AlwaysLearning,你试过了吗?它在输出时将每个字节转换为其 base-10 字符串表示形式。 (其实和 [System.IO.File]::ReadAllBytes 完全一样)。不完全是要求的,你必须先转换输出。
    • @SilverbackNet:也可以试试Get-Content ... -Encoding Byte -Raw,它返回[System.Byte[]],而不是[System.Object[]],否则处理方式完全相同。
    • bytePowerShell 6 中不受支持。
    猜你喜欢
    • 2015-12-11
    • 2014-01-25
    • 2021-12-04
    • 2019-04-13
    • 2020-11-11
    • 2012-09-11
    • 2019-09-25
    • 2017-06-28
    • 1970-01-01
    相关资源
    最近更新 更多