强制转换的研究(1)

/***************************************************
 *作     者:温子祺
 *联系方式:[email protected]
 *说    明 :强制转换的研究-(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、
2 3 4 5



方法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、
2 3 4 5



 

你可能感兴趣的:(转换)