如下:uint8_t *pu8_a;
uint32_t * pu32_b;
uint32_t u32_data;
我想读pu8_a地址开始的4个bytes,下面方法:
pu32_b = (uint32_t)(pu8_a);
u32_data = (uint32_t *)pu32_b ;
但是用这种方法读出来的的东西都是错的 ,请问有什么方法处理吗
指针和数据搞混了
pu8_a;pu32_b;为指针。u32_data是数据,所以这样写:
pu32_b = (uint32_t *)(pu8_a);
u32_data = (uint32_t *)pu32_b ;
在此之前,pu8_a指针必须已经赋值,例如pu8_a = &u8_data,即pu8_a指向u8_data的地址追问
pu8_a;pu32_b;为指针。u32_data是数据,所以这样写:
pu32_b = (uint32_t *)(pu8_a);
u32_data = (uint32_t *)pu32_b ;
在此之前,pu8_a指针必须已经赋值,例如pu8_a = &u8_data,即pu8_a指向u8_data的地址追问
我的本意是想读取(pu8_a)地址开始的一个32位数,所以上面的写法感觉是将pu8_a中的8位数据强制转换成了32位的
我的本意是想读取(pu8_a)地址开始的一个32位数,所以上面的写法感觉是将pu8_a中的8位数据强制转换成了32位的
追答我明白你说的意思,假如pu8_a指向u8_data,则pu8_a地址开始一个字节存放的是u8_data的数值,利用pu32_b = (uint32_t *)(pu8_a)左指针转换后,pu32_b指向的地址和pu8_a相同,但u32_data 是占用了四个字节,而不是u8_data占用一个字节。。。
温馨提示:答案为网友推荐,仅供参考
第1个回答 2015-11-02
u32_data = (uint32_t *)pu32_b ;
改成
u32_data = *pu32_b ;
改成
u32_data = *pu32_b ;
第2个回答 2019-12-24
不明白这样的需求,同一个运行环境中指针位宽都是一样的,如果你是想使用hack技术将指针拆分便于跨系统传递,可以如下处理:
int a=-10;
int *p=&a;//32位系统下指针位宽为32位
long pp=(long)p;//将指针强制转换为long(32位)
int ph=(pp>>16);//右移2字节取高16位
int pl=pp&0xffff;//掩码遮蔽掉高16位取低16位
cout<
评论
0
0
加载更多
int a=-10;
int *p=&a;//32位系统下指针位宽为32位
long pp=(long)p;//将指针强制转换为long(32位)
int ph=(pp>>16);//右移2字节取高16位
int pl=pp&0xffff;//掩码遮蔽掉高16位取低16位
cout<
评论
0
0
加载更多