#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;
}