如何引用特定变量中的子元素
How can I refer to sub-elements in a particular variable?
我的问题如下:我有一个64位变量,类型为uint64_t
(所以我知道它被指定为至少64位宽)。
我希望能够引用它的不同部分,例如将其分解为两个uint32_t
s,四个uint16_t
s或八个uint8_t
s。是否有一种符合标准的方法来做到这一点,而不依赖于未定义的行为?
我的方法如下:
class Buffer
{
uint64_t m_64BitBuffer;
public:
uint64_t & R64() { return m_64BitBuffer; }
uint32_t & R32(R32::Part part) { return *(reinterpret_cast<uint32_t*>(&m_64BitBuffer)+part); }
uint16_t & R16(R16::Part part) { return *(reinterpret_cast<uint16_t*>(&m_64BitBuffer)+part); }
uint8_t & R8(R8::Part part) { return *(reinterpret_cast<uint8_t*>(&m_64BitBuffer)+part); }
};
其中R32::Part
、R16::Part
、R8::Part
为enum
s,分别定义0 ~ 1、0 ~ 3、0 ~ 7之间的值。
我想这应该没问题。例如,对齐应该没有问题。我想知道我是否违反了任何规则,如果是,如何正确地做到这一点。
某些编译器允许通过联合进行类型双关,因此您可以简单地使用以下匿名联合成员:
union {
uint64_t val;
struct { uint32_t as32[2]; };
struct { uint16_t as16[4]; };
struct { uint8_t as8[8]; };
} u;
访问每个部分就像从相应的成员中读取一样简单。
相关文章:
- 如何为 c++ 的不同变量类型的结构元素创建动态数组?
- 如果变量数据包含大于 vector 所有元素的整数,则仅在视觉工作室上接收"矢量下标超出范围"?
- C++将字符串数组的元素存储到变量中
- C++结构元素(成员变量)的数量
- 循环中的变量被设置为下一个数组的元素始终具有相同的内存地址?
- 打印/修改类对象的特定成员变量,其类定义列表 (STL) 包含的元素类型
- 如何将矢量大小扩展一个元素并用变量填充它
- 连续单个元素的敏感变量
- C++:如何将 char 变量分配给向量<char>并访问该向量的元素进行比较?
- 动态数组添加元素而不创建结构变量/对象
- 如何添加和读取两种变量的向量元素
- 无法在重载运算符时将数组元素分配给类变量"="
- c++从列表中移除元素,并将其分配给对象变量
- 正在使用C 中的插入后变量不确定行为访问数组的元素
- 类型转换问题:字符数组的元素转换为整数变量
- 将矢量元素分配给字符变量
- 在变量之间移动队列而不复制元素
- 在应用变量函数的矩阵元素上循环
- 如何制作一个集合,其中元素使用局部变量进行排序
- C++:使用递归和引用变量查找数组中的最大元素