bit-fields相关内容

C ++-如何使用位域

所以我最近遇到了这样的事情 unsigned char ch:7; 在结构内的 .我读了一点.显然,这些被称为位字段.它们用于设置char可以接收的数据的宽度.但是我们如何使用这些东西.例如,我知道我们可以将变量ch设置为一个字节 unsigned char ch = 0x61;cout ..
发布时间:2021-04-19 19:30:58 C/C++开发

C ++中的位域有多慢

我有一个C ++应用程序,其中包括许多带有手动控制的位字段的结构,例如 #define FLAG1 0x0001#define FLAG2 0x0002#定义FLAG3 0x0004类MyClass{''未签名的标志;int IsFlag1Set(){返回标志&FLAG1;}void SetFlag1Set(){标志| = FLAG1;}void ResetFlag1(){标志& = 0xff ..
发布时间:2021-04-19 18:51:47 C/C++开发

char和int上的C struct位域之间的差异

在C语言中使用位域时,我发现我所期望的差异与用于声明字段的实际类型无关. 我没有找到任何明确的解释.现在,可以确定问题所在,因此,即使没有明确的答复,该帖子对遇到相同问题的任何人也可能很有用.即使有人可以指出正式的解释,这种说法也很棒. 以下结构占用2个字节的内存. struct {char field0:1;//1位-位0char field1:2;//2位-位2降至1字符字段2 ..
发布时间:2021-04-15 19:50:17 其他开发

C ++位字段和-Wconversion

当我使用g ++将值分配给位字段时, -Wconversion会产生警告. 源文件: struct Foo { public: unsigned int x : 4; unsigned int y : 9; unsigned int z : 17; }; int main(int, char**) { int a = 12; Foo f; ..
发布时间:2020-11-11 21:09:37 C/C++开发

gcc将警告“太小而无法容纳”的所有值。

我需要使用作用域枚举,以便可以将它们作为特定类型传递给我们的序列化程序。我为 Enum1 的枚举成员提供了显式的整数值。 我放置了两个与描述匹配的作用域枚举因此,以上枚举为位域 枚举类Enum1 { value1 = 0x0, value2 = 0x1, value3 = 0x2 }; 枚举类Enum2 { value1 = 0x0, value2, value3, ..
发布时间:2020-10-30 04:02:57 C/C++开发

gcc中的位域字节序

位域的字节序由实现定义。有没有一种方法可以在编译时通过宏或其他编译器标志检查gcc的位域字节序实际上是什么? 换句话说,给定类似以下内容: struct X { uint32_t a:8; uint32_t b:24; }; 我是否有办法在编译时知道 a 是 X 中的第一个字节还是最后一个字节? 解决方案 在Linux系统上,您可以检查 __ ..
发布时间:2020-10-29 18:36:01 C/C++开发

我应该使用位域来映射传入的串行数据吗?

我们有数据通过串行(蓝牙)输入,该数据映射到特定的结构。结构的某些部分为亚字节大小,因此“显而易见的”解决方案是将传入数据映射到位字段。我无法解决的是机器或编译器的位字节序是否会影响它(这很难测试),我是否应该完全放弃位域。 例如,我们有一块1.5字节的数据,因此我们使用了以下结构: { uint8_t data1; // lsb uint8_t data2:4; // msb ..
发布时间:2020-10-29 18:32:28 其他开发

有理由避免使用位域结构成员吗?

我很早就知道C中有位域,偶尔我会用它们来定义密集的结构: typedef结构Message_s { unsigned int标志:1; unsigned int通道:4; unsigned int信号:11; }消息; 当我阅读开放源代码时,我经常会发现要存储的位掩码和移位操作并在手卷位字段中检索此类信息。这是如此普遍,以至于我认为作者并不了解位域语法,因此我 ..
发布时间:2020-09-28 04:19:27 其他开发

位域元素的默认值

在C ++ 11中可以做到 struct S {int i = 42;}; 每当忘记初始化成员i时,它的 都会默认初始化为42。我只是用 位域尝试了此操作 struct S {int i = 42:5;}; 并且正在获得 错误:在':'令牌之前应有';' 位域成员是否存在此功能,如果存在,如何我该使用它吗? ..
发布时间:2020-09-27 22:53:07 C/C++开发

使用枚举类的C ++ 11标准一致位掩码

您可以使用enum类实现标准符合(如n3242草案的17.5.2.1.3中所述)类型的安全位掩码吗?按照我的阅读方式,如果类型T支持|,&,^,〜,| =,& =和^ =运算符,则它是位掩码,并且进一步可以执行if(l& r),其中l和r属于T类型。列表中缺少运算符!=和==,并且为了允许排序可能还想重载 ..
发布时间:2020-09-27 20:06:11 C/C++开发

为什么禁止非常量引用位域?

C ++ 11中的9.6 / 3节非常清楚:“非常量引用不应绑定到位域。” 我知道禁止将引用直接绑定到位域是不可能的。但是,如果我声明这样的话, struct IPv4Header { std :: uint32_t version:4,//假定IPv4 Wikipedia条目正确 IHL:4, DSCP:6, ECN:2, totalLength:16; }; ..
发布时间:2020-09-27 07:15:32 C/C++开发

在C / C ++中读取/写入半字节(无位字段)

有没有一种简单的方法可以在不使用位域的情况下读取/写入字节半字节? 我将始终需要读取两个半字节,但需要分别写入每个半字节。 谢谢! 解决方案 使用掩码: char字节; 字节=(字节& 0xF0)| (半字节1& 0xF); //写低四重奏 byte =(byte& 0x0F)| ((nibble2& 0xF) ..
发布时间:2020-09-24 18:52:08 C/C++开发

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

我正在阅读UDP上的一些MPEG传输流协议,并且其中包含一些时髦的位域(例如长度13).我正在使用"struct"库进行广泛的拆包,但是有一种简单的方式说“获取接下来的13位",而不必手动调整位操作吗?我想要类似C处理位字段的方式(不必还原为C). 建议? 解决方案 这是一个经常提出的问题.过去有 ASPN食谱条目. 并且有一个一个人希望从执行此操作的模块中看到的大量要求. ..
发布时间:2020-09-21 04:18:51 Python

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

我正在为二进制格式编写解析器.这种二进制格式涉及不同的表,这些表又是二进制格式,通常包含不同的字段大小(其中的50-100之间). 这些结构中的大多数都将具有位域,并且在用C表示时将看起来像这样: struct myHeader { unsigned char fieldA : 3 unsigned char fieldB : 2; unsigned char fieldC ..
发布时间:2020-09-20 22:53:31 Python

为长度为1的位域分配一个值

假设我有 struct A { signed char a:1; unsigned char b:1; }; 如果我有 A two, three; two.a = 2; two.b = 2; three.a = 3; three.b = 3; two在其字段中将包含0,而three将包含1.因此,这让我认为,将数字分配给单个位字段会得到最低有效位(2是10(二进 ..
发布时间:2020-09-20 21:31:35 C/C++开发