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

传地址中8bit类型到16bit类型的强制转换有关问题

2012-04-16 
传地址中8bit类型到16bit类型的强制转换问题?unsigned int a0x1234unsigned int b0unsigned char *cu

传地址中8bit类型到16bit类型的强制转换问题?
unsigned int a=0x1234;
unsigned int b=0;
unsigned char *c;
unsigned int *d;

一个函数unsigned char *get(void)转换后获取a的首地址
c=get(void);//等于c=&a

b=(*(c+1)<<8)|(*c);//虽然get是unsigned char,但是通过地址转移,int型的b还是能获得int型a的完整数据。

请问,不进行移动,强制转换char为int如何实现?
难道
d=(unsigned int *)get();
b=*d;
就可以了吗?谢谢高手!



[解决办法]
c=get(void);//等于c=&a

由于Char型比int型包含的信息少,所以这样转换会发生信息丢失,最好不要

d=(unsigned int *)get();
b=*d;

这个转换是从信息量少的char型转换到信息量大int型,所以 没有问题,这样就可以了。

[解决办法]
示例程序:
#include <stdio.h>

static int a;

char* getaddr(void)
{
return (char*)&a;
}

int main(void)
{
a = 545;
char *c;
c = getaddr();

printf("a=%d,c=%d",a,*c);
return 0;
}

运行结果:
a=545,c=33


[解决办法]
unsigned short a=0x1234;
unsigned char *c;
unsigned short b=0;

c=(unsigned char *)(&a);
b=*((unsigned short *)c);

热点排行