bit-fields相关内容

结构声明中的冒号是什么意思,例如:1、:7、:16 或:32?

以下 C++ 代码是什么意思? unsigned char a : 1;无符号字符 b:7; 我猜它创建了两个字符 a 和 b,它们都应该是一个字节长,但我不知道“:1"和“:7"部分的作用. 解决方案 1 和 7 是位大小,用于限制值的范围.它们通常出现在结构和工会中.例如,在某些系统上(取决于 char 宽度和打包规则等),代码: typedef 结构 {无符号字符:1;无符号字 ..
发布时间:2022-01-30 16:29:46 C/C++开发

在 Python 中进行位域操作的最佳方法是什么?

我正在通过 UDP 读取一些 MPEG 传输流协议,其中包含一些时髦的位域(例如长度为 13).我正在使用“struct"库进行广泛的拆包,但是有没有一种简单的方法可以说“抓住接下来的 13 位"而不是手动调整位操作?我想要类似于 C 处理位字段的方式(无需恢复为 C). 建议? 解决方案 这是一个经常被问到的问题.上面有一个 ASPN Cookbook 条目,过去曾为我服务过. ..
发布时间:2022-01-22 16:33:59 Python

Microsoft 可以在一个位中存储三值字段吗?

我对 SQL/数据库一无所知,但我正在和一位从事大量数据库工作的朋友聊天,讨论了一些数据库如何使用“布尔"字段,该字段除了 true 和 false 之外还可以取 NULL 值. 对此,他发表了如下评论:“值得微软称赞的是,他们从未将这种字段称为布尔值,他们只是稍微称呼它.而且它是一个真实的位 - 如果你有 8 个或一条记录中的位域较少,只需要一个字节就可以全部存储." 当然,这对我来 ..
发布时间:2022-01-19 17:19:44 数据库

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

我想知道是否有 GCC C 编译器指令允许我确定结构打包的位顺序?喜欢的东西: #pragma bit_order left 这种需求的基本原理是我有以下结构: 结构{联合{无符号字符字节;结构{无符号字符 B0: 1;无符号字符 B1: 1;无符号字符 B2:1;无符号字符 B3:1;无符号字符 B4:4;}少量;}物品;} 我的结构; 有了这个结构,我希望编译器这样打包: 位顺序:| ..
发布时间:2022-01-17 08:53:16 其他开发

使用 -1 将所有位设置为真是否安全?

我已经看到这种模式在 C &C++. unsigned int flags = -1;//所有位都为真 这是实现此目的的一种很好的便携方式吗?还是使用 0xffffffff 或 ~0 更好? 解决方案 我建议你完全按照你展示的那样去做,因为它是最直接的.初始化为 -1 它将工作 always,独立于实际的符号表示,而 ~ 有时会出现令人惊讶的行为,因为您必须拥有正确的操作数类型.只有这 ..
发布时间:2022-01-09 18:59:39 C/C++开发

Microsoft 可以在一位中存储三值字段吗?

我对 SQL/数据库完全一无所知,但我正在和一位从事大量数据库工作的朋友聊天,了解一些数据库如何使用“布尔值"字段,除了 true 和 false 外,该字段还可以取值为 NULL. 关于这一点,他发表了以下评论:“感谢微软,他们从来没有将这种字段称为布尔值,他们只是称之为一点.这是一个真实的一点 - 如果你有八个或一条记录中的位域更少,只需要一个字节就可以把它们全部存储起来." 这对 ..
发布时间:2022-01-06 23:10:45 数据库

大小小于 int 的位域是否应该作为积分提升的主题?

假设我有以下 struct: 结构体A{无符号整数 a : 1;无符号整数 b : 1;}; 我感兴趣的是表达式a + b 的类型.虽然从技术上讲位域具有小于 int 的“类型",因此可能应该发生积分提升,然后结果是 int 就像它恰好在 gcc 和 clang 中一样. 但是由于不可能提取位字段本身的确切类型,并且它总是会被推导出它的“大"类型(即 unsigned int 在这种情况 ..

不同编译器的 sizeof(struct) 不同

假设我有这样的代码: #include #include int main(int argc, char *argv[]) {类型定义结构{uint16_t x : 9;uint8_t y : 7;} z;printf("sizeof(z) = %lu\n",sizeof(z));} 我对 Mac 上的 clang 有不同的结果 (2),有人告诉我在 Windows 上它返回了 (3).不确定 ..
发布时间:2021-12-23 17:26:45 其他开发

为什么普通变量不允许位域?

我想知道为什么位域适用于联合/结构,而不适用于像 int 或 short 这样的普通变量. 这有效: struct foo {整数栏:10;}; 但这失败了: int bar : 10;//“预期的 ';'在声明结束时" 为什么此功能仅在联合/结构中可用,而在变量中不可用?技术上不一样吗? 编辑: 如果允许,您可以创建一个具有 3 个字节的变量,而无需每次都使用 struct ..
发布时间:2021-12-23 17:21:17 其他开发

结构位域最大大小(C99,C++)

位结构域的最大位宽是多少? struct i { long long i:127;} 我可以在 struct 中定义一个位域,位域的大小最大为 128 位、256 位或更大吗?有一些超宽向量类型,例如 sse2(128 位)、avx1/avx2(256 位)、avx-512(下一个至强融核为 512 位)寄存器;以及 gcc 中的 __int128 等扩展. 解决方案 C99 §6.7 ..
发布时间:2021-12-23 17:12:31 C/C++开发

打包位域时 VC++ 在做什么?

为了澄清我的问题,让我们从一个示例程序开始: #include #pragma 包(推,1)结构cc{无符号整数 a : 3;无符号整数 b : 16;无符号整数 c : 1;无符号整数 d : 1;无符号整数:1;无符号整数 f : 1;无符号整数 g : 1;无符号整数 h : 1;无符号整数 i : 6;无符号整数 j : 6;无符号整数 k : 4;无符号整数 l:15;};#pragm ..
发布时间:2021-12-22 18:36:10 C/C++开发

不是 int 类型的位域?

我有一个使用位域的代码,声明如下 typedef struct my{const char *name;uint8_t is_alpha : 1;uint8_t is_hwaccel : 1;uint8_t x_chroma_shift;uint8_t y_chroma_shift;} mystr; uint8_t 被定义为 unsigned char. 在 MS-VS 2008 中使用 ..
发布时间:2021-12-22 18:35:25 其他开发

在 C 中使用位字段时的字段顺序

我有一个以下类型的结构 typedef 结构体{无符号整数 a : 8;无符号整数 b : 6;无符号整数 c : 2;}x, *ptr; 我想做的是更改字段 c 的值. 我做了类似下面的事情 x 结构 = { 0 };x->c=1; 当我查看内存映射时,我希望找到 00 01,但我却找到了 00 40.看起来在排列第二个字节时,它把c字段放在最低位,b字段放在最高位.我在 GCC ..
发布时间:2021-12-18 23:09:52 其他开发

具有位域的结构的内存布局

我有这个 C 结构:(代表一个 IP 数据报) struct ip_dgram{无符号整数版本:4;无符号整数:4;无符号整数类型:8;无符号整数:16;无符号整数 fid:16;无符号整数标志:3;无符号整数 foff : 13;无符号整数 ttl : 8;无符号整数 pcol : 8;无符号整数 chksm:16;无符号整数源代码:32;无符号整数:32;无符号字符选择[40];}; 我给 ..
发布时间:2021-12-15 08:14:43 服务器开发

如何模拟 Delphi 记录中的位域?

我想在 Delphi 中声明一个记录,它包含与在 C 中相同的布局. 感兴趣的人:此记录是 Windows 操作系统的 LDT_ENTRY 记录中联合的一部分.(我需要在 Delphi 中使用此记录,因为我正在 Delphi 中开发 Xbox 模拟器 - 请参阅 sourceforge 上的项目 Dxbx). 无论如何,有问题的记录定义为: 结构体{DWORD BaseMid : ..
发布时间:2021-12-13 23:04:40 其他开发

结构或联合中的“无符号临时:3"是什么意思?

可能的重复: 这段 C++ 代码是什么意思? 我正在尝试使用 JNA 将 C 结构映射到 Java.我遇到了一些我从未见过的东西. struct 定义如下: struct op{无符号操作类型:9;//--->这是什么意思?无符号 op_opt:1;未签名的 op_latefree:1;未签名的 op_latefreed:1;未签名的 op_attached:1;未签名的 op_s ..
发布时间:2021-12-02 08:08:31 C/C++开发

为什么位字节序是位域中的一个问题?

任何使用位域的可移植代码似乎都能区分小端和大端平台.有关此类代码的示例,请参见 linux 内核中 struct iphdr 的声明.我不明白为什么位字节序是一个问题. 据我所知,位域纯粹是编译器构造,用于促进位级操作. 例如,考虑以下位域:struct ParsedInt {无符号整数 f1:1;无符号整数 f2:3;无符号整数 f3:4;};uint8_t i;struct Par ..
发布时间:2021-12-01 23:55:57 其他开发

结构声明中的冒号是什么意思,例如:1、:7、:16 或 :32?

下面的 C++ 代码是什么意思? unsigned char a : 1;无符号字符 b : 7; 我猜它创建了两个字符 a 和 b,它们都应该是一个字节长,但我不知道 ":1" 和 ":7" 部分是做什么的. 解决方案 1 和 7 是位大小,用于限制值的范围.它们通常出现在结构和联合中.例如,在某些系统上(取决于char 宽度和打包规则等),代码: typedef struct { ..
发布时间:2021-12-01 15:24:24 C/C++开发

使用 c# 的 StrucLayout 和 FieldOffset 表示联合位域

我知道为了在 C# 中表示联合,我需要使用 StructLayout[LayoutKind.Explicit)] 和 [FieldOffset(x)] 属性来指定联合内部的字节偏移量.但是,我有一个以下联合我想表示,而 FieldOffset 属性仅按字节大小偏移. union _myUnion{无符号整数信息;结构{unsigned int flag1:1//位 0unsigned int f ..
发布时间:2021-09-14 18:34:17 C#/.NET