请教如下功能如何实现
请问如下功能怎么实现
我现在typedef了一个结构体
然后我现在有一个十六进制的无符号整形变量
我现在定义一个结构体变量
我想通过该结构体变量的p_ch指针来实现提取val的高八位和第八位,也就是12,和34,请问如何操作呢
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------
用联合union
我现在typedef了一个结构体
typedef struct ss
{
unsigned int x;
unsigned char *p_ch;
}ss;
然后我现在有一个十六进制的无符号整形变量
unsigned int val = 0x1234;
我现在定义一个结构体变量
ss s;
我想通过该结构体变量的p_ch指针来实现提取val的高八位和第八位,也就是12,和34,请问如何操作呢
------解决方案--------------------
//低8为
unsigned char low0_7 = (unsigned char)((val & 0xff) >> 0);
//8-15位
unsigned char low8_15 = (unsigned char)((val & 0xff00) >> 8);
//16-23位
unsigned char low16_23 = (unsigned char)((val & 0xff0000) >> 16);
//....
------解决方案--------------------
typedef struct ss
{
unsigned char p_ch[sizeof(unsigned int)];
}ss;
int main()
{
ss s;
unsigned int val = 0x12345678;
for(int i = 0; i < sizeof(val); ++i)
{
s.p_ch[i] = (unsigned char)((val & (0xff << (i * CHAR_BIT))) >> (i * CHAR_BIT));
}
return 0;
}
------解决方案--------------------
unsigned int val = 0x1234;
unsigned char *pTmp = new unsigned char[2];
memcpy(pTmp,&val,2);
ss s;
s.p_ch = pTmp;
------解决方案--------------------
用联合union
#include <iostream>
union ss
{
unsigned int x;
unsigned char ch[4];
};
int main()
{
ss s;
s.x = 0x12345678;
printf("%x %x %x %x\n", s.ch[0], s.ch[1], s.ch[2], s.ch[3]);
return 0;
}