我需要一个 96 位长的结构,我可以将自定义位字段放入其中。字段的长度无处不在,8
, 3
, 26
, 56
。重要的是它们保持这些确切的长度(有一个例外,见下文)。
我看到了许多将数据连接成单个紧凑字段的方法:std::bitset
, struct
s (连续保存字段),当然只使用int
s。然而:
这种
bitset
方法是有问题的,因为操作需要非常快地发生:bitset 没有提供一种方法来立即将 range 设置(x..y)
为整个 range(0..96)
,使用一个原子操作。如果我要循环设置单个位,那该死的。由于对长度的限制,这种
struct
方法是有问题的。该
int
方法是有问题的,因为int64_t
不够长。我当然可以int32_t
在此旁边使用 an ,但是请参见下文。
一个显而易见的解决方案是将56 + 8
字段放入int64_t
中,将其余部分放入 中int32_t
。这里的问题是56
-long 字段是唯一一个实际上可能在以后的开发中减少的字段,这意味着我将在.int64_t
32 - (26 + 3) = 3
int32_t
有什么方法可以尽可能紧凑地存储这些(从代码的角度来看),同时仍然能够通过掩码访问广泛的区域(不像std::bitset
)?