从二进制文件中读取字符串

2024-01-07

我想从文件中读取字节 1,2 和 3。我知道它对应于一个字符串(在本例中它是ELFLinux 二进制头)

我在网上找到了以下示例,我想出了这个:

with open('hello', 'rb') as f:
    f.seek(1)
    bytes = f.read(3)
    string = struct.unpack('s', bytes)
    print st

查看官方文档struct https://docs.python.org/2.7/library/struct.html似乎经过s作为参数应该允许我读取一个字符串。

我收到错误:

st = struct.unpack('s', bytes)
struct.error: unpack requires a string argument of length 1

编辑:使用Python 2.7


在您的特殊情况下,只需检查就足够了

if bytes == 'ELF':

一步测试所有三个字节是否为三个字符E, L and F.

但如果您想检查数值,则无需在此处解压任何内容。只需使用ord(bytes[i])(i在0、1、2中)获取三个字节的字节值。

或者你可以使用

byte_values = struct.unpack('bbb', bytes)

获取三个字节的元组。您还可以动态解压该元组,以防字节具有如下可命名的语义:

width, height, depth = struct.unpack('bbb', bytes)

Use 'BBB'代替'bbb'如果您的字节值是无符号的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从二进制文件中读取字符串 的相关文章

随机推荐

  • 为什么当路径满足时 NWPathMonitor 不给出路径更新?

    我有一个简单的类名为网络路径监视器看起来如下 class NetworkPathMonitor ObservableObject Cancellable Published var path NWPath nil let monitor N
  • 编译器可以优化从堆到堆栈的分配吗?

    就编译器优化而言 将堆分配更改为堆栈分配是否合法和 或可能 或者这会打破假设规则 https stackoverflow com questions 15718262 what exactly is the as if rule 例如 假设
  • 为什么当构建错误退出时,来自 docker 文件的 docker 构建镜像会创建容器?

    我正在使用 docker 从 docker 文件构建图像 在此过程中发生了一些错误 因此构建退出并显示错误代码 当我跑步时docker images我可以看到未标记的图像 所以我尝试删除它docker rmi xxxxx 但它总是失败 它说
  • 通过react-image-crop模块获取裁剪后的图像

    你能帮我如何通过react image crop模块获得输出 裁剪图像的来源 吗 上传组件如下所示 class MyUpload extends Component constructor super this state src sour
  • 无法在 64 位 Linux 上运行 32 位应用程序

    我安装了 Ubuntu 8 04 64 位的最小安装版 当我尝试运行一些 32 位程序时 例如我的jhead程序 我收到消息No such file or directory 我认为这可能是一个库问题 但是当我这样做时 ldd jhead
  • 将特征用户描述添加到多个自定义 C++ BLE GATT 服务

    我正在尝试使用以下命令将一些特征用户描述添加到我的自定义 BLE GATT 服务中mbed API https developer mbed org teams Bluetooth Low Energy 到目前为止我的工作是基于this h
  • 在 Windows 7 上安装调试工具来分析小型转储

    我一直在尝试安装 调试工具 以便尝试分析服务器崩溃 Windows Server 2008 R2 的转储文件 我过去曾经这样做过 但我找不到如何安装 找到 Windows 7 的调试工具 我读过这篇知识库文章 http support mi
  • CMake 无法从已安装的 Visual Studio 2015 中识别 C 编译器

    我一直在尝试为 vtk 安装 CMake 但收到此错误消息 The C compiler identification is unknown The CXX compiler identification is unknown 我正在使用
  • 将函数存储在列表中并稍后调用它们[重复]

    这个问题在这里已经有答案了 我想将函数存储在列表中 然后在程序中调用该列表中的这些函数 这对我有用 但是我不知道它是否正确 example functions my functions would actually get user inp
  • android AudioRecord 从 MIC 读取幅度

    我正在尝试录制麦克风的声音并绘制实时图表 我能够记录并绘制图表 问题是使用下面的代码记录的值不准确 例如 下图是我在完全没有声音时得到的结果 我看过使用 fft 的示例 但我不确定这对我的情况是否有任何帮助 因为我正在尝试绘制时域图 并且我
  • 通过内存/CPU 效率分析特定时间间隔内的近实时数据所需的想法

    我有一些环境传感器 我想检测温度的突然变化 以及随着时间的推移缓慢的趋势 但是我想根据内存中的参数进行大部分数学计算 参数可能如下所示 取决于改变 注 括号中的项目是在添加数据时实时计算的 5 分钟 导数 最大值 最小值 平均值 最近 3
  • GLUT 只是呈现空白屏幕?

    这是代码 没有任何错误 有什么问题吗 我编译它 命令提示符打开 窗口打开 窗口全是白色的 我将其重新着色为灰色 它也没有绘制我的形状 那么问题是什么 ifdef APPLE include
  • 使用 Delphi 查找特殊驱动器

    我正在尝试在 Delphi 2007 中编写一个小程序 以便在便携式 USB 驱动器插入 Windows 7 计算机时访问该驱动器上的文件 但该驱动器并不显示为标准驱动器号 它出现在 Windows 资源管理器中的便携式设备下 我编写了以下
  • Holoviews 更改数据着色器颜色图

    我正在尝试更改数据着色器使用的颜色图 我试过这个 datashade scatter cmap Reds Where scatter is an hv Scatter元素 这不起作用 因为 datashader 需要一个可迭代的或返回颜色的
  • 输入上的 Key.ENTER 不提交

    我正在尝试空手道 并且有一个用例 我需要在搜索框中触发搜索 并且没有触发搜索的按钮 因此需要通过回车键触发 我尝试过多种不同的方式来尝试提供Key ENTER到输入以使其工作 但它们都没有触发它 我正在使用latest https gith
  • 关于“gcc: 无法识别的选项‘-rdynamic’”的问题

    I use gcc on Solaris 10建造make程序 并获取以下信息 gcc unrecognized option rdynamic 检查后rdynamic https gcc gnu org onlinedocs gcc 4
  • Eloquent - 如何在 hasMany 关系中添加联接?

    我有一个典型的 hasMany 方法 public function earmarks return this gt hasMany App Earmark 但是 当我使用 gt with earmarks 找回它们 我想补充一下 gt j
  • 管道输入器错误“输入包含 NaN”

    我正在尝试创建一个管道来帮助我通过以下方式处理一些数据 计算平均值 缩放数据 然后拟合回归器 我在使用 Imputer 时遇到了一些问题 并且可能使用错误 我知道我的数据包含 NaN 但是当我尝试将它们输入管道内时 我收到一个 ValueE
  • ngx-admin 模板 npm 安装错误

    我克隆了ngx admin来自 git repo 的角度模板https github com akveo ngx admin https github com akveo ngx admin我尝试安装节点模块以开始工作和运行该项目 但它给了
  • 从二进制文件中读取字符串

    我想从文件中读取字节 1 2 和 3 我知道它对应于一个字符串 在本例中它是ELFLinux 二进制头 我在网上找到了以下示例 我想出了这个 with open hello rb as f f seek 1 bytes f read 3 s