强制 C++ 结构紧密包装

2023-11-25

我正在尝试读取二进制文件。问题在于文件的创建者没有花时间将数据结构与其自然边界正确对齐,并且所有内容都包装得很紧。这使得使用 C++ 结构读取数据变得困难。

有没有办法强制struct打包紧?

Example:

struct {
    short a;
    int b;
}

上面的结构体是8个字节:2为short a, 2 表示填充, 4 表示int b。然而,在磁盘上,数据只有 6 个字节(没有用于对齐的 2 个字节的填充)

请注意,实际的数据结构有数千个字节和许多字段,包括几个数组,所以我不想单独读取每个字段。


如果你使用 GCC,你可以这样做struct __attribute__ ((packed)) { short a; int b; }

在 VC++ 上你可以这样做#pragma pack(1)。这个选项是也得到海湾合作委员会的支持.

#pragma pack(push, 1)
struct { short a; int b; }
#pragma pack(pop)

其他编译器可能可以选择在没有填充的情况下对结构进行紧密包装。

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

强制 C++ 结构紧密包装 的相关文章

随机推荐

  • 在 SQLAlchemy 中从集合中删除对象

    我将大量专利数据存储在 MySQL 数据库中 并通过 SQLAlchemy 与其进行交互 我在专利类中有一个集合 代表受让人列表 被分配专利的公司 assignees relationship Company secondary paten
  • 如何使用 Visual Studio Code 在 dotnet 构建中包含资源文件

    我正在 Visual Studio 代码编辑器中使用 dotnet core 构建 WPF 应用程序 我遇到的问题是资源文件夹不包含在构建中 或者看起来是这样 我找不到如何在 Visual Studio 之外执行此操作的示例 并且我尝试使用
  • 如何从Spark RDD中的特定分区获取数据?

    我想访问 Spark RDD 中特定分区的数据 我可以按如下方式获取分区的地址 myRDD partitions 0 但我想从中获取数据myRDD partitions 0 分割 我尝试了官方 org apache spark 文档但找不到
  • Ubuntu 13.04:如何构建Monodevelop 4.0.1?

    我从git下载了源码 git clone git github com mono monodevelop git 和依赖项 cd monodevelop git submodule init git submodule update 我设置
  • 如何在 Bash 中解析 XML?

    理想情况下 我希望能够做的是 cat xhtmlfile xhtml getElementViaXPath path html head title sed e s g gt titleOfXHTMLPage txt 这实际上只是一个解释Y
  • C++编译时函数执行

    我的代码中有字符串标签 它们被转换为数字并用于搜索标签值结构中的值 我有这样的事情 void foo type value search SomeTag 其中搜索定义如下 type search const char tag return
  • 如何使用 jQuery 获取表格中的单元格 () x 和 y 坐标?

    我正在寻找一种获取表格中单元格 X Y 位置的好方法 不要将它与 css position 混淆 我正在寻找笛卡尔坐标系中的 X 和 Y 坐标 众所周知 我们可以使用以下命令获取表格中的特定单元格 grid 0 rows 5 cells 7
  • 使用类上的宏注释创建或扩展伴随对象

    使用 Scala 2 10 2 11 宏天堂注释宏 如何添加或扩展注释类的伴生对象 骨骼 import scala annotation StaticAnnotation import scala reflect macros import
  • 如何处理keras:错误:维度0的切片索引0超出范围

    我使用 keras tensorflow 后端 构建我的 lstm 网络 这是我的代码 from keras models import Sequential Model from keras layers import LSTM Conv
  • 如何在 GridView 中实现条件格式

    我的 aspx 页面上有一个 GridView 它显示由以下类定义的对象集合 public class Item public string ItemName get set public object ItemValue get set
  • 如何在C中对单个字符执行scanf [重复]

    这个问题在这里已经有答案了 在C中 我正在尝试从用户那里获取字符scanf当我运行它时 程序不会等待用户输入任何内容 这是代码 char ch printf Enter one char scanf c ch printf c n ch 为
  • 将项目的不同版本导入到 Eclipse 中

    我在 Eclipse 中有一个项目 现在我想导入另一个具有不同名称和位置的项目 但具有相同的结构 相同的包 很多相同的类 但是当我尝试导入它时 它说 某些项目无法导入 因为它们已经存在于工作区中 如果我想拥有一个项目的两个版本该怎么办 我应
  • MEF 导出是缓存还是每次请求时都会发现?

    如果我有一种类型 MyClass 请注册 Export typeof Myclass 属性 以及 PartCreationPolicy CreationPolicy Shared or PartCreationPolicy Creation
  • 如何从“浏览”选项卡中排除文件夹?

    我正在尝试排除上的几个文件夹ExploreVisual Studio Code 中的选项卡 为此 我添加了以下内容jsconfig json到我的项目的根目录 compilerOptions target ES6 exclude node
  • 如何捕获传单弹出窗口上的点击事件

    我在传单地图上同时打开多个弹出窗口 并且它们可以重叠 如果单击 我想将弹出窗口置于前面 虽然我可以轻松地点击地图map on click function e do something 我似乎无法用弹出窗口做同样的事情 如何捕获 L Pop
  • 带有圆角边缘的 ActionBar

    我想知道 是否可以使我的 ActionBar 具有圆角边缘 更具体地说 仅顶部圆角 左上 右上 我做了一些搜索 但大多数方法都已经过时 对我不起作用 我正在使用 AppCompat 支持库 v22 1 1 我已经制作了我想要实现的目标的图像
  • Next JS - getStaticProps 不返回任何内容

    我正在将 Next js 与上下文 API 和样式组件一起使用 但我似乎无法理解getStaticProps在职的 我读过其他帖子 他们经常谈论习俗 app我确实有 但在使用 context API 之前我从未遇到过这个问题 我也尝试过ge
  • 尝试时从 CultureInfo 中缺少国家和地点

    我需要本地化一个应用程序 并注意到有几个国家 地区没有出现在与cultureInfo 关联的县代码列表中 塞浦路斯就是一个例子 我想可能还有其他例子 如果我需要本地化塞浦路斯的设置 或其他缺失的设置 我将如何重命名我的资源文件 以便它们呈现
  • PHP PDO 多重选择查询始终删除最后一个行集

    我在使用 PDO 语句进行多项选择时遇到了似乎是错误的问题 我正在构建一个包含许多 SELECT 的 SQL 查询 无论它生成多少个 SELECT 语句 最后一个行集都会被删除 这是发生的事情的截断示例 pdo connection stu
  • 强制 C++ 结构紧密包装

    我正在尝试读取二进制文件 问题在于文件的创建者没有花时间将数据结构与其自然边界正确对齐 并且所有内容都包装得很紧 这使得使用 C 结构读取数据变得困难 有没有办法强制struct打包紧 Example struct short a int