请问位结构体指针应该如何赋值?

open82977352 2012-05-23 11:14:14
比方说我定义了一个32位的位结构体指针:

struct cmd{
unsigned char a:4;
unsigned char b:6;
unsigned char c:1;
unsigned char d:1;
unsigned char e:4;
unsigned char f:8;
unsigned char g:8;
} cmd1,*pcmd;

位结构体指针pcmd只能指向位结构体cmd1,如pcmd=&cmd1

但是如果我想让pcmd直接指向一个32位的整型数:
unsigned long int test;
pcmd = &test;这样的语句是不行的。。。

不能位结构体直接指向32位数据嘛,有什么办法?
...全文
228 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
景语 2012-05-23
  • 打赏
  • 举报
回复
使用强制类型转换
pcmd = (void *)&test;
prohibit 2012-05-23
  • 打赏
  • 举报
回复 1
pcmd = ((struct cmd *)&test);
open82977352 2012-05-23
  • 打赏
  • 举报
回复
刚才写错了
test=0x01234567;

二进制应该为0000 0001 0010 0011 0100 0101 0110 0111
open82977352 2012-05-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
你结构体5字节了, 一个long的内存够它用?
[/Quote]

的确sizeof为5字节。。。。为什么我定义的32位会出现5字节啊,不是4字节吗?
应该定义为什么类型啊?
open82977352 2012-05-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
C/C++ code
pcmd = ((struct cmd *)&test);
[/Quote]

为什么我指向之后分配数据好像不对的嘛。。。
test=0x123456;
pcmd = ((struct cmd *)&test);

printf("%d\n",pcmd->a);
printf("%d\n",pcmd->b);
printf("%d\n",pcmd->c);
printf("%d\n",pcmd->d);
printf("%d\n",pcmd->e);
printf("%d\n",pcmd->f);
printf("%d\n",pcmd->g);

结果为:
7
5
1
0
3
1
204

我想赋值的结果是:
0 (4位)
4 (6位)
1 (1位)
0 (1位)
3 (4位)
69 (8位)
103 (8位)





qq120848369 2012-05-23
  • 打赏
  • 举报
回复
你结构体5字节了, 一个long的内存够它用?

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧