我有一个结构:
struct foo{
uint8_t i1 : 4;
uint8_t i2 : 4;
uint8_t i3 : 4;
uint8_t i4 : 4;
}
现在,我有一个16位整数(称为a),我想写入此结构的内存位置,而无需执行以下操作:
foo1.i1 = (uint8_t)a>>12;
foo1.i2 = (uint8_t)a>>8;
foo1.i3 = (uint8_t)a>>4;
foo1.i4 = (uint8_t)a;
是否可以选择仅将16位写入foo1的存储位置。就像是:
*(*uint16_t)&foo1 = a;
最佳答案
首先,您应该确保这是您需要做的优化-做得不正确,您可能会遇到有关对齐,字节顺序等问题。因此,您将需要使用探查器来检查代码性能,并确定这是否是消耗大量处理器时间的 Realm 之一。记住what Donald Knuth wrote:
一旦确认这是一个有用的优化,那么您应该可以通过几种方式做到这一点。其中之一是使用memcpy
...
memcpy(&foo1, &a, sizeof(foo1));
或者,您可以使用
foo1
成员将union
设置为uint16_t
类型,然后将其写入...union {
struct foo f;
uint16_t u;
} foo1;
foo1.u = a;
关于c++ - 如何写入为结构保留的内存位置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44145983/