读书人

传地址中8bit类型到16bit类型的强制转

发布时间: 2012-04-16 16:20:04 作者: rapoo

传地址中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);

读书人网 >C语言

热点推荐