问题标签 [bit-fields]

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 投票
4 回答
892 浏览

c - C 位域内存使用情况

我需要处理以下形式的一些数据:

我确保它们总共计数到 9 个字节。
但他们没有.. 将该结构的 9 个字节写入文件并将其读回并不会恢复所有数据,而是sizeof(data)返回 16。
这里有什么问题?

0 投票
5 回答
4191 浏览

c++ - 线程安全和位域

我知道位域依赖于编译器,但我没有找到有关最新 g++ 和 Visual C++ 2010 位域线程安全的文档。

位域成员的操作是原子的吗?

0 投票
6 回答
2246 浏览

c++ - Function accepting two arguments, a byte and a bit field, and returns the value of the field in the byte

I found some code online that performs this task:

However, I don't understand why we can't just do this:

Will this work? Why or why not? Are there better implementations?

0 投票
3 回答
8563 浏览

c++ - 比较不同大小的位域

如果您使用按位运算符(&|等)来比较两个不同大小的位域,会发生什么情况?

例如,0 1 1 0比较0 0 1 0 0 0 0 1

或者...

或者...

或者...

0 投票
2 回答
5215 浏览

python - 从整数制作 python 位数组 - 奇怪的结果!

我刚刚开始在 python 中使用 bitarray 包,并尝试从整数制作 bitarray 给我带来了非常令人困惑的结果:

有谁知道为什么会发生这种情况?

另外:从int制作位数组的更好方法是什么?这可行,但字符串转换似乎是一种奇怪的方式......

编辑:我最终切换到bitstring,它确实有一种从整数获取位串的简单方法:

0 投票
4 回答
2168 浏览

c++ - 使用 0xFFFFFFFF 是设置 32 位类型的所有位的可靠方法吗?

有此代码与 Windows SDK 一起编译:

哪里DragQueryFileW()有这个签名:

UINT在 SDK 标头中的某处定义,如下所示:

对于int肯定是32位的平台。像往常一样,像这样UINT的类型意味着具有独立于系统位数的固定宽度,因此如果必须在其他一些平台上重新编译相同的代码,以DragQueryFileW()某种方式重新实现的地方也会有一个对应typedefUINT映射到合适的 32-位无符号类型。

现在有一个静态分析工具,它查看0xFFFFFFFF常量并抱怨它是一个不可移植的幻数,应该-1改用. 虽然当然-1是好的和可移植的,但我看不出在0xFFFFFFFF这里使用常量可能是个问题,因为即使移植类型仍然是 32 位的,并且常量会很好。

在这种情况下,是否使用0xFFFFFFFF而不是-1设置所有位安全且可移植?

0 投票
1 回答
12196 浏览

c - 如何使用 GCC 编译器强制执行 struct 位顺序?

我想知道是否有一个 GCC C 编译器指令允许我确定结构打包的位顺序?喜欢的东西:

这种需要的理由是我有以下结构:

使用这种结构,我希望编译器以这种方式打包它:

而不是 GCC 是如何做到的:

我正在处理具有巨大头文件的 MCU,这些头文件具有根据规定的硬件地址计算位偏移的结构。我希望 GCC C 编译器中有一个编译器指令可以在我尝试翻转制造商提供的文件中的所有字段之前为我进行位顺序交换。

0 投票
2 回答
2016 浏览

c++ - 在 C++ 中将 int 打包到位域中

我正在将一些代码从 ASM 转换为 C++,ASM 看起来像这样:

结构看起来像:

是否有一种简单的两行方式来填充 C++ 中的结构?到目前为止,我正在使用:

这一切都很好,但我必须填充这些位域结构中的大约 9-10 个,其中一些有 30 个奇数域。所以这样做最终会将 10 行代码变成 100+ 行代码,这显然不是那么好。

那么有没有一种简单、干净的方法可以在 C++ 中复制 ASM?

我当然试过“miscStruct = CPUInfo[0];” 但不幸的是,C++ 不喜欢这样。:(

..而且我无法编辑 struct

0 投票
5 回答
447 浏览

c - 这个结构的大小如何变成 4 字节

我确实有一个包含位字段的结构。根据我的说法,它是 2 个字节,但结果是 4 个。我已经在 stackoverflow 上阅读了一些与此相关的问题,但无法与我的问题相关。这是我有的结构

如果 int 类型必须在其内存边界上,那么输出应该是 8 个字节,但它显示 4 个字节?

0 投票
2 回答
6546 浏览

python - 在读/写二进制数据结构时访问位域

我正在为二进制格式编写解析器。这种二进制格式涉及不同的表,这些表又是二进制格式,通常包含不同的字段大小(大约在 50 到 100 个之间)。

这些结构中的大多数都将具有位域,并且在用 C 表示时看起来像这样:

我遇到了 struct 模块,但意识到它的最低分辨率是一个字节而不是一个位,否则该模块非常适合这项工作。

我知道使用 ctypes 支持位域,但我不确定如何在此处连接包含位域的 ctypes 结构。

我的另一个选择是自己操作这些位并将其输入字节并将其与 struct 模块一起使用 - 但由于我有接近 50-100 种不同类型的此类结构,因此编写代码变得更容易出错。我也担心效率,因为这个工具可能被用来解析大量的二进制数据。

谢谢。