zoukankan      html  css  js  c++  java
  • 强制转换的研究(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



  • 相关阅读:
    HDU1171(01背包均分问题)
    HDU2159(完全背包)
    HDU1203(01背包变形)
    DAG上的DP
    ADB命令小结
    HDU3065(AC自动机入门题)
    HDU2896(AC自动机入门题)
    性能测试监控分析(13)-sysstat安装升级
    tomcat(9)-linux apache tomcat集群环境搭建
    nginx(4)-负载均衡的5种策略及原理
  • 原文地址:https://www.cnblogs.com/wenziqi/p/1769375.html
Copyright © 2011-2022 走看看