Android项目笔记三:wifi传输当中各种数据转换

通过wifi和下面单片机通信,避免不了各种数据转换:

安卓端:

一、String转化为float

try {
    floatValue = Float.valueOf(strValue);
    floatTemp  = Float.valueOf(strTemp);
}catch (NumberFormatException e){
    e.printStackTrace();
    continue;
}catch (NullPointerException e){
    e.printStackTrace();
    continue;
}

String转换为其它数据格式类似;

二、socket接收数据处理

this.receivebuf = new byte[20]; //根据协议设置大小

int receivebufLong=0; //实际读出个数

try {
    receivebufLong=this.receiveStream.read(this.receivebuf);//线程阻塞
}catch (IOException e){
    e.printStackTrace();
    Message msg = new Message();
    msg.what=1;
    msg.arg1=1;//出现异常
    UIHandler.sendMessage(msg);
   return;
}

这样socket数据就在receivebuf 数组中,个数为receivebufLong;

1、传输数据0~2000:

假如下面单片机要传输的数据为0~2000,一个字节肯定放不下,那么我们传输一般是这么做

uint16  temp = userData;

uint8    sendBuffer[10];

sendBuffer[0] =userData>>8;

sendBuffer[1] =userData;

rs232TX(sendBuffer,2);

那客户端接收到数据怎么处理呢?我的方法如下:

由于Android中没有无符号数据类型,所以我要用int进行处理:

int userDataIn = 0;

int temp=0;

userDataIn = (int) receivebuf[0];

userDataIn = (userDataIn <<8) & 0x0000FF00;

temp = (int)receivebuf[1];

temp = temp & 0x000000FF;

userDataIn = userDataIn | temp ;

2、传输数据-50.0~124.9温度数据怎么做呢

假设温度传感器读书数据已经转换好,并且是扩大10倍(带一位小数)

int16 temp =0;

temp = ds18b20H;

temp = (temp <<8) & 0xFF00;

temp = temp | ds18b20L;

这个temp就是扩大10倍的温度(带一位小数),可以用于显示等等。。。。

单片机传输类似1,这里讲下客户端转换:

方案一(我的实现):

int  userTemp   = 0;

int userTempH = 0;

int userTempL = 0;

float  user = 0;


userTempH = sendBuffer[0] ;

userTempH = (userTempH << 8) & 0x0000FF00 ;

userTempL = sendBuffer[1] ;

userTempL = userTempL  & 0x000000FF;


if((sendBuffer[0]  == 0x80) && (sendBuffer[1] == 0x00)){

//最大负数

userTemp = -32768;

}else if((sendBuffer[0]  & 0x80) == 0x80){

//负数

userTemp = userTempH | userTempL | 0xFFFF0000;

}else{

//正数

userTemp = userTempH | userTempL | 0x00000000;

}

user  = (float)userTemp;

user = user /10;//实际温度


方案二(我的新想法,未验证):

int  userTemp1   = 0;

int  userTemp 2  = 0;

float  user = 0;


userTemp1   = (int) sendBuffer[0];

userTemp2   = ((int) sendBuffer[1]) & 0x000000FF;

userTemp1  = (userTemp1 << 8) & 0x0000FF00;

userTemp1 = userTemp1 | userTemp2;

if(userTemp1 == 0x00008000){

userTemp1  = -32768;

}else if((userTemp1 & 0x00008000) == 0x00008000){

userTemp1 |= 0xFFFF0000;

}

user  = userTemp1;

user = user/10;//实际温度


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值