您的位置:首页 > 移动开发 > Android开发

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

2016-05-30 10:55 609 查看
通过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;//实际温度
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: