强制转换的研究(1)

/***************************************************
 *作     者:温子祺
 *联系方式:wenziqi@hotmail.com
 *说    明 :强制转换的研究-(1) 
 ***************************************************/

     C语言精髓第一精髓就是指针的使用,第二精髓就是强制转换的使用,恰当地利用指针和强制转换不但可以提供程序效率,而且使程序更加之简洁,由于强制转换在C语言编程中占有重要的地位,下面将已五个比较典型的例子作为讲解。

 

代码
例子1:将带符号字节整型转换为无符号字节整型

UINT8 a
=0

INT8 b
=-3

a
=(UINT8)b;



例子2:在大端模式下(8051系列单片机是大端模式),将数组a[
2]转化为无符号16位整型值。

方法1:采用位移方法。

UINT8 a[
2]={0x12,0x34};

UINT16 b
=0;



b
=(a[0]<<8)|a[1];



结果:b
=0x1234



方法2:强制类型转换。

UINT8 a[
2]={0x12,0x34};

UINT16 b
=0;



b
= *(UINT16 *)a; //强制转换



结果:b
=0x1234



例子3:保存结构体数据内容。

方法1:逐个保存。

typedef
struct _ST

{

UINT8 a;

UINT8 b;

UINT8 c;

UINT8 d;

UINT8 e;

}ST;



ST s;

UINT8 a[
5]={0};

s.a
=1;

s.b
=2;

s.c
=3;

s.d
=4;

s.e
=5;







a[
0]=s.a;

a[
1]=s.b;

a[
2]=s.c;

a[
3]=s.d;

a[
4]=s.e;



结果:数组a存储的内容是1、
2345



方法2:强制类型转换。

typedef
struct _ST

{

UINT8 a;

UINT8 b;

UINT8 c;

UINT8 d;

UINT8 e;

}ST;



ST s;

UINT8 a[
5]={0};

UINT8
*p=(UINT8 *)&s;//强制转换

UINT8 i
=0;



s.a
=1;

s.b
=2;

s.c
=3;

s.d
=4;

s.e
=5;



for(i=0;i<sizeof(s);i++)

{

a[i]
=*p++;

}





结果:数组a存储的内容是1、
2345



原文地址:https://www.cnblogs.com/wenziqi/p/1769375.html