编辑代码

#include <stdio.h>
                    
int sent_read(unsigned char *ptr,unsigned char read[],unsigned char *prt)
{           //可通过指针传输数组或值,可通过数组传输数组
    unsigned char sent[3];
    sent[0] = 0x02; sent[1] = 0xA0; sent[2] = 0x40;
    read[0] = 0x3E; read[1] = 0x28; read[2] = 0x0F; read[3] =0x48;
    *prt = sent[0];
    *ptr = sent[0];    
    *(ptr+1) = sent[1];   //通过指针移位赋值,也可以传输数组
    *(ptr+2) = sent[2];
    float ret = ((((int)read[0] << 8) + (int)read[1]) << 16) + ((int)read[2] << 8 )+ (int)read[3];
    return ret;    //返回值只能返回单个值,不能返回数组
}

int main(void)
{
    int d[4] = {0xA0,0x58,0x10,0x40};   //在定义时才能用这种形式赋值
    //int HexValue;
    //HexValue = ((((int)d[2] << 8) + (int)d[3]) << 16) + ((int)d[0] << 8 )+ (int)d[1];
    //printf("%#x\n",HexValue);
    //d[5] = 0x22;
   // printf("%#x\n",d[5]);  //数组超两个可以,两个以上不行
    //int d[4] = {0xA0,0x58,0x10,0x40};  //出错
    //d[6] = 0x22;                       //出错
    //printf("%#x\n",d[6]);              //出错
    //int d[] = {0xA0,0x58,0x10,0x40};   //出错
    //d[7] = 0x22;                       //出错
    //printf("%#x\n",d[7]);              //出错
    //int d[7] = {0xA0,0x58,0x10,0x40};   //成功
    //d[7] = 0x22;
    //printf("%#x\n",d[7]);
    int e;
    //int b = 258;
    int a = 0x3E280F48;
    //int b = 0xA0, c = 0x40;
    //c = c << 8;         //加2个0
    //a = c + b;          //直接叠加
   // a = a << 16;        //加4个0,用于转换浮点数
   // e = ((d[3] << 8) + d[0]) << 16;  //直接操作数组中的值,进行叠加
    //printf("%#x\n",e);
    //float b = 1.423;
    printf("%#x\t%f\n", a, *(float*)&a);  //强制转换为浮点型
    //printf("%f\t%#x\n", b, *(int*)&b);      //强制转换为16进制
    unsigned char sentData[3];
    unsigned char readData[4];
    unsigned char rent;
    unsigned char value;

    //获取返回值,只能是单个值 //同时获取数组值
    rent = sent_read(sentData,readData,&value); 
    printf("%f\n",rent);   
    //rent通过返回值传输单个值,sentData通过指针传输数组
    //readData通过数组传输数组,value通过指针传输单个值

    //printf("%#x\t%#x\n",sentData[2],readData[1]);   //只能显示单个值,数组里的值也传过来了
    //printf("%#x\n",rent);
    //printf("%#x\n",value);        //通过指针也可以传输单个数值,要加取址符&
    
    int value1 = ((sentData[2]<<8)+sentData[1])<<16;  //*一定要转化为int,不能用char
    float FloatValue = *(float*)&value1;         //int类型转换为浮点型
    //printf("%#x\t%f\n",value1,FloatValue);

    return 0;
}