首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

请教如下功能如何实现

2013-09-06 
请问如下功能怎么实现我现在typedef了一个结构体typedef struct ss{unsigned int xunsigned char *p_ch}

请问如下功能怎么实现
我现在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;
}

热点排行