【发布时间】:2013-10-22 23:23:00
【问题描述】:
我有以下类型的结构
typedef struct
{
unsigned int a : 8;
unsigned int b : 6;
unsigned int c : 2;
}x, *ptr;
我想做的是改变字段 c 的值。
我做了类似以下的事情
x structure = { 0 };
x->c = 1;
当我查看内存映射时,我希望找到 00 01,但我却找到了 00 40。 看起来在排列第二个字节时,它将 c 字段放在最低位,将 b 字段放在最高位。我在 GCC 和 Windows 编译器上都看到了这一点。
目前,我所做的是以下,一切正常。
unsigned char ptr2 = (unsigned char*) ptr
*(ptr2 + 1) &= 0xFC
*(ptr2 + 1) |= 0x01
我看错了内存映射吗? 感谢您的帮助。
【问题讨论】:
-
如何显示 00 40 值?
-
假设
ptr持有&structure(您的问题不清楚)*(ptr+1)是快速进入未定义行为。 -
@WhozCraig - 抱歉,这里的代码不完整,我已将转换为 unsigned short 以便每次移动 1。
-
@ouah - 我在 Visual Studio 中检查了内存映射,稍后打印了变量/字段的值。
-
@fashasha 好的。
*ptr作为类型和ptr作为变量让我头疼。我想我明白你在做什么。ptr在取消引用代码中是(现在是)unsigned char*。
标签: c gcc bit-manipulation bit bit-fields