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都是直接可以转换过去的,不需要其他的步骤,只需要配置好了,就可以转换。 这篇博文,学习如何转化自定义类型,也就是所谓的类。 使用这个有两种方法 我首先把....

Android 数据传输方式 WIFI 蓝牙 USB

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

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

Android WiFi开发教程(三)——WiFi热点数据传输

在上一篇文章中介绍了WiFi的搜索和连接,如果你还没阅读过,建议先阅读上一篇Android WiFi开发教程(二)——WiFi的搜索和连接。本篇接着简单介绍手机上如何通过WiFi热点进行数据传输。跟蓝...

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

原文地址:http://blog.csdn.net/ace1985/article/details/8566487 Android手机和电脑间基于wifi进行数据传输,从技术上讲,主要有两种方案...

android中byte[] short[] int[] long[]数组数据转换

import java.nio.ByteOrder; public class BytesTransUtils { private String TAG = "BytesTransUt...

android 一些数据转换方法

android 一些数据转换方法 package com.ai9475.util; import android.content.Context; import android.content.r...

android中将复杂json对象进行数据转换

首先大家需要知道的是android集成了apache client和json处理相关的函数,大家可直接调用 1、一般的json对象服务器端都会进行封装成比较简单的基础pojo,但是有些时...

android中将复杂json对象进行数据转换

首先大家需要知道的是android集成了apache client和json处理相关的函数,大家可直接调用 1、一般的json对象服务器端都会进行封装成比较简单的基础pojo,但是有些时候我...
  • kongqz
  • kongqz
  • 2012-04-04 11:35
  • 5464
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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