问题标签 [packed]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
288 浏览

matlab - 使用MATLAB在六边形内包装圆圈

我做了一个“将六边形包装在一个六边形内”的脚本,如图所示。一堆小六边形. 现在我想将这些较小的六边形转换为相同半径的圆,即 250 以相同的方式填充在六边形内。这是六边形的脚本。任何人都可以指导我在此脚本中进行的更改,以将这些六边形替换为相同几何形状的圆圈。有什么解决办法吗?

0 投票
1 回答
1710 浏览

struct - IAR Linker 放置压缩结构

我正在努力使用打包结构的 IAR 链接器。

这是一个放置在绝对位置的结构:

该结构的大小为 10 个字节,我使用 sizeof() 对其进行了验证。

链接器配置:

我希望链接器在该位置准确放置 10 个字节的数据,但我可以在映射文件中看到 12 个字节(0xC)的大小:

...并且工具链创建一个额外的十六进制文件,显示链接器添加的 2 个字节:

我假设链接器使用经典的 4 字节对齐,因为它是 32 位 CPU,但我如何强制链接器仅放置 10 个字节?稍后,该结构应该移动到特定内存区域的末尾。所以我不想有任何填充字节。

我正在使用适用于 ARM 版本 8.22 的 IAR Embedded Workbench。

最好的问候杰

0 投票
2 回答
2122 浏览

c++ - 在 GCC 中使用为类打包的属性

GCC 文档

您只能在枚举、结构或联合的定义上指定打包属性属性,而不是在未定义枚举类型、结构或联合的 typedef 上。

这是否意味着我不能将此属性应用于类?

0 投票
0 回答
86 浏览

c++ - 非 pod 结构的打包联合

我想知道,按以下方式组织数据是否可以接受?由于成员初始值设定项,结构不再是 POD 类型,并且编译器会发出有关忽略打包属性的警告。是否可以保证包装好?

0 投票
1 回答
851 浏览

c - 我如何确定这个 C 结构在 32 位和 64 位系统上都被打包?“__attribute__((packed))” 总是必要的吗?

我正在尝试构建一个简单的自定义应用层协议,本质上带有时间戳以及一些其他有用的信息,以便在不同的 Linux 系统之间执行少量网络测量。

就 Linux 系统而言,在我最初的想法中,实现应该尽可能地在不同平台(x86、ARM、...)之间移植。

为了管理标题,我创建了这个结构:

之后,一些有效载荷数据可能存在也可能不存在(如果 len=0)。由于这些数据必须通过网络发送,如果我没记错的话,我需要要打包的结构,没有任何对齐填充。

我的疑问实际上是这是否可以被认为是已经打包的,主要是由于存在struct timeval, 来携带时间戳。

在 32 位系统下,struct timeval应该是 8 个字节。在 64 位系统下,它应该是 16 字节(刚刚通过打印测试过sizeof(struct timeval))。

在 32 位系统下,假设它已经打包是否安全,因为 1+1+2+2+2 字节 = 8 字节,即 的大小sendtime?或者在任何情况下都会添加一个填充,以便将每个字段与最后一个字段对齐,哪个是最大的?

那么在最后一个字段是 16 字节的 64 位系统中会发生什么?我认为在任何情况下,结构都不会再“被布局打包”了(这是正确的吗?)。

在为不同平台编译代码时,添加是否__attribute__((packed))足够且始终有必要确保结构被打包?有更好的解决方案吗?

0 投票
3 回答
127 浏览

c++ - 打包结构和不打包没有代码重复

我有这个代码:

我想使用相同的结构,有时是打包的,有时不是。您知道编写此代码避免重复的任何方法吗?

[编辑] 问题应该是:“.. 编写此代码避免尽可能多的代码重复”

[Edit2] 我尝试过使用空类优化的实验,但没有成功

[Edit3] 添加了基本示例:

0 投票
2 回答
422 浏览

typedef - 使用 typedef + 压缩数组(与多维压缩数组相比)的每个元素的有符号类型是否有效

我有一个关于具有多个打包维度的签名属性的问题,该属性是使用 typedef 分阶段定义的。

基本上,

* foo[0] 没有签名(如果你期望有符号的元素,有符号是没有意义的)因为所有的整个打包数组都是有符号的,但每个元素都没有符号。

但,

* foo[0] 已签名。好奇怪啊。。

Q1> 会发生什么?为什么要签??

Q2> 是否与逻辑签名的声明相同 [1:0][2:0] foo; // ??

Q3> LRM 说 [1:0] 指数变化最快,这不是我的预期。逻辑签名 [2:0][1:0] foo; //??

0 投票
1 回答
93 浏览

labview - 如何使用 LabVIEW 将打包的 BCD 数字写入旧仪器(Varian FR41 Gaussmeter)?

我目前正在尝试与仅使用打包 BCD 数字的旧仪器进行通信(如果有人熟悉,它是 Varian FR41 控制器高斯计)。我正在使用 LabVIEW 来复制一些输出 BCD 代码的旧 C 代码。下面是 C 脚本。它所做的是一些简单的算法来生成整数,这些整数通过 IEEE 端口使用%c.

我生成了一个.VI,它生成相同的数字b1,b2,b3并将它们放入一串打包的 BCD 数字中。使用上面的输入变量HV,magconst,mass,输出应该是2510.8高斯。和b1,b2,b3分别是142,37,16

现在看看瓦里安高斯计想要什么。这是描述仪器如何接收信息的文本(并非所有这些都是有用的,但为了完整起见,我复制了它)。我还附上了一张显示 BCD 格式的示意图。手册中的 BCD 格式

数据以三个 8 位字节的序列传输到 FR-41。每个字节分为两个半字节,hi 和 lo,它们可能只包含 BCD 数字。当使用辅助输出端口时,将第四个字节(任何二进制数)添加到序列的开头。发送的最后一个字符在高字节位置包含新高斯设置的最低有效位 (LSD),在低字节中包含加载控制非 BCD 字符 (bin 14),它被解释为用新数据加载所有寄存器。lo 字节的一位控制使用时的 10 kGauss 超量程。在接收到控制字之前不会更改设置。

所以,如果我在C上面的代码中正确理解了这一点,添加的第一个字节(辅助输出端口的东西)似乎是 7,它应该是0000 0111BCD。后面的字节,要写入 2510.8,后面应该0010 0101 0001 0000 1000跟着1110(对于 bin 14 控制字)。

这就是我所做的。使用附加的 .VI,我可以重现我期望的 32 位 BCD 字符串。我将它发送到 LabVIEW 中的 GPIB Send Message VI(我也尝试过使用 VISA Write,但据我所知,它在所有测试中执行完全相同的操作)。然而,仪器没有记录任何发生的事情。

有趣的是,当我将信息作为%f浮点数的字符串发送给仪器时7.0000142.00037.00016.000,仪器会记录正在发生的事情,并且数十位和数百位发生了变化。因此,如果我42以浮点形式发送,仪器将进入 X4X2.X 高斯设置。如果我把142它做同样的事情。如果我把17它转到 X1X7.X 设置。如果我发送它,17那么25它只会占用第一个。

我的想法是 GPIB Send 或 VISA Write 中的某些内容正在获取我的 BCD 数字字符串并将它们作为其他内容发送出去,但我无法弄清楚我可能做错了什么。任何帮助或测试将不胜感激;我已经为此苦苦挣扎了几个星期,但无济于事。用于重现上面复制的 C 脚本的 VI

0 投票
2 回答
374 浏览

c - 带位域​​的压缩结构的大小

考虑这段代码:

没有给出编译器选项。

输出:

为什么cl结果sizeof为 9?

标准是怎么说的?

0 投票
0 回答
57 浏览

struct - C:访问具有奇数编号的结构时出现地址陷阱错误。成员

我正在使用 MPLABX 和编译器 xc16-gcc 为 16 位 dsPIC33CH128MP508 微控制器开发。我正在编写通过 I2C 从 RTC 读取的代码。我定义了以下结构:

struct 的问题sRTC_TIME_t有奇数个成员,内存对齐由编译器自动打包。从 RTC 读取也需要打包结构。

当试图读取第一个成员sec 时,代码会使用TRAPS_ADDRESS_ERR = 2, /** Address error Trap vector */.

sRTC_TIME_t time;

second_reading = time.sec.SECONDS;

当我们在结构中添加第八个虚拟成员时,sRTC_TIME_t没有错误!

这个问题的根源可能是什么?