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

原创 2016年05月30日 10:55:32

通过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;//实际温度


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

FluorineFX框架下的.NET和FLEX当中数据转换(自定义类型)

一些基础的数据,比如int,string都是直接可以转换过去的,不需要其他的步骤,只需要配置好了,就可以转换。 这篇博文,学习如何转化自定义类型,也就是所谓的类。 使用这个有两种方法 我首先把....
  • HPhone
  • HPhone
  • 2011年11月20日 09:38
  • 772

Android手机通过wifi进行数据传输(三)

上文接Android手机通过wifi进行数据传输(二)  源码文件2 MyTimerCheck.java package edu.cdut.robin.hotspot; publ...
  • hudashi
  • hudashi
  • 2014年05月08日 10:29
  • 14044

Android手机通过wifi进行数据传输(三)

http://blog.csdn.net/hudashi/article/details/25284305 上文接Android手机通过wifi进行数据传输(二)  源码文件2 ...

项目____ajax,JSONArray,数据转换异常

json数据转换异常:net.sf.json.JSONException: java.lang.reflect.InvocationTargetException 执行: JSONArra...

Android手机通过wifi进行数据传输(四)

源文件5 main.xml xml version="1.0" encoding="utf-8"?> xmlns:android="http://schemas.android.com/apk/...
  • hudashi
  • hudashi
  • 2014年05月08日 10:30
  • 7177

Android手机通过wifi进行数据传输(二)

上文接Android手机通过wifi进行数据传输(一) 以下是源码文件 原文件Constant.java package edu.cdut.robin; public class Const...
  • hudashi
  • hudashi
  • 2014年05月08日 10:27
  • 12776

Android 数据传输方式 WIFI 蓝牙 USB

1、WIFI 通过网络使用Socket来实现通信。 2、蓝牙 蓝牙2.0 和 蓝牙4.0BLE 蓝牙2.0 1、首先扫描到蓝牙 2、通过UUID来配对蓝牙    1)、安全模式是 ...

Android基于WIFI实现电脑和手机间数据传输的技术方案研究

http://blog.csdn.net/asce1885/article/details/8566487 Android手机和电脑间基于wifi进行数据传输,从技术上讲,主要有两种方案...
  • daditao
  • daditao
  • 2014年05月15日 09:46
  • 9019

Android基于WIFI实现电脑和手机间数据传输的技术方案研究

Android手机和电脑间基于wifi进行数据传输,从技术上讲,主要有两种方案: 一种是通过ftp协议实现,Android手机作为数据传输过程中的ftp服务器; 一种是通过http协议实现。And...
  • ACE1985
  • ACE1985
  • 2013年02月03日 12:10
  • 13583
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android项目笔记三:wifi传输当中各种数据转换
举报原因:
原因补充:

(最多只允许输入30个字)