import android.util.Log;

public class CommandHelper {

public static String intToHexString(int value) {
String str = "";
if (value >= 0) {
str = Integer.toHexString(value);
} else {
str = Integer.toHexString((value & 0x000000FF) | 0xFFFFFF00)
.substring(6);
}
Log.d("SerialPort", "str = " + str);
if (str.length() == 1)
str = "0" + str;
str = str.toUpperCase();
return str;
}

public static String crcValue(String head, String id, String size,
String data) {
int value = 0;
if(null != size){
value = Integer.parseInt(head, 16) + Integer.parseInt(id, 16)
+ Integer.parseInt(size, 16) + dataValue(data);
} else {
value = Integer.parseInt(head, 16) + Integer.parseInt(id, 16)
+ dataValue(data);
}
Log.d("SerialPort", "value = " + value + " ~value = " + ~value);
return CommandHelper.intToHexString((~value) + 1);
}

public static int dataValue(String data) {
int result = 0;
for (int i = 0; i < data.length(); i = i + 2) {
result = result + Integer.parseInt(data.substring(i, i + 2), 16);
}
Log.d("SerialPort", "result = " + result);
return result;
}

public static String byteToHexString(byte[] data, int size) {
String receivedData = "";
for (int i = 0; i < size; i++) {
String hex = Integer.toHexString(data[i] & 0xff);
if (hex.length() == 1)
hex = '0' + hex;
receivedData += hex.toUpperCase();
}
return receivedData;
}

public static byte[] hexStringToBytes(String hexString) {
if (hexString == null || hexString.equals(""))
return null;
hexString = hexString.toUpperCase();
int length = hexString.length() / 2;
char[] hexChars = hexString.toCharArray();
byte[] d = new byte[length];
for (int i = 0; i < length; i++) {
int pos = i * 2;
d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1]));
// Log.d("AppsActivity", "d " + i + " = " + d[i]);
}
return d;
}

public static byte charToByte(char c) {
return (byte) "0123456789ABCDEF".indexOf(c);
}

public static BaseCommand parseStringToBaseCommand(String data) {
if (null == data || data.length() < CommandUtil.COMMAND_LEAST_LENGTH) {
return null;
}
int length = data.length();
BaseCommand cmd = new BaseCommand();
cmd.setHead(CommandUtil.HEAD_READ);
cmd.setId(data.substring(2, 4));
cmd.setData(data.substring(6, length - 2));
cmd.setCrc(data.substring(length - 2, length));
return cmd;
}
}

android 进制转换方法的更多相关文章

  1. java中的进制转换方法

    java中进行二进制,八进制,十六进制,十进制间进行相互转换 关键字: java 进制转换 十进制转成十六进制: Integer.toHexString(int i) 十进制转成八进制 Integer ...

  2. python内置的进制转换方法

    python进制转换方法总结表: ↓ 2进制 8进制 10进制 16进制 2进制 - bin(int(x, 8)) bin(int(x, 10)) bin(int(x, 16)) 8进制 oct(in ...

  3. itoa函数的实现(不同进制)

    2013-07-08 17:12:30 itoa函数相对于atoi函数,比较简单,还是要注意考虑的全面. 小结: 一下几点需要考虑: 对负数,要加上负号: 考虑不同进制,根据要求进行处理:对不同的进制 ...

  4. JDK中Integer类的进制转换实现

    JDK中关于Integer类的进制转换方法很精巧,具体实现如下: final static char[] digits = { '0' , '1' , '2' , '3' , '4' , '5' , ...

  5. Android源码中的FLAG为何使用16进制

    1.在阅读源码的时候经常发现有一些标志属性使用一些位操作来判断是否具有该标志,增加标志或者去除标志. 比如View.java中的 /** * This view does not want keyst ...

  6. android 蓝牙编程重点---如何发送和接收16进制数据

    最近的android蓝牙开发项目也逐渐接近尾声,基本的功能都已经完成,只剩下界面的设计.现在真的是舒了一口气! 作为编程学习经验只有1年的菜鸟,这是我独自完成的商业性产品,而且还是涉及到与单片机蓝牙模 ...

  7. HexDump.java解析,android 16进制转换

    HexDump.java解析android 16进制转换 package com.android.internal.util; public class HexDump { private final ...

  8. Android选择/拍照 剪裁 base64/16进制/byte上传图片+PHP接收图片

    转载请注明出处:http://blog.csdn.net/iwanghang/article/details/65633129认为博文实用,请点赞,请评论,请关注.谢谢! ~ 老规矩,先上GIF动态图 ...

  9. 为什么Android源码中都使用16进制进行状态管理?

    前言 在Android源码中,对于"多状态"的管理总是通过16进制数字来表示,类似这种格式: //ViewGroup.java protected int mGroupFlags; ...

随机推荐

  1. 登录用户执行sudo时报错

    场景: 以普通用户登录,登陆后切换至root或其他用户时报错(sudo su -或sudo -i) 报错信息: -bash: /bin/logger: Argument list too long 根 ...

  2. 浅析 MySQL Replication(本文转自网络)

    作者:卢飞 来源:DoDBA(mysqlcode) 0.导读 本文几乎涵盖了MySQL Replication(主从复制)的大部分知识点,包括Replication原理.binlog format.复 ...

  3. viewport大白话

    以下所有内容均是我自己理解的,可能有误,懂得大佬希望指点一下我.. 首先,写一个简单的页面.里面只有1个200*200的div <html lang="en"> < ...

  4. C++中 int main(int argc, char **argv) 命令行传递参数

    C++中,比较常见的是不带参数的主函数int main(),如果使用命令行执行程序,主函数也可以接收预先输入的参数,形式如下. int main(int argc,char **argv) argc: ...

  5. [BZOJ1587]叶子合并leaves

    Description 在一个美丽的秋天,丽丽每天都经过的花园小巷落满了树叶,她决定把树叶堆成K堆,小巷是笔直的 共有N片树叶(树叶排列也是笔直的),每片树叶都有一个重量值,并且每两片想邻的树叶之间的 ...

  6. AJAX基础知识点——思维导图

    如图 思维导图图片链接 http://www.edrawsoft.cn/viewer/public/s/4db2e712070147 有道云笔记链接 http://note.youdao.com/no ...

  7. caffe2 教程入门(python版)

    学习思路 1.先看官方文档,学习如何使用python调用caffe2包,包括 Basics of Caffe2 - Workspaces, Operators, and Nets Toy Regres ...

  8. xpath选择器简介及如何使用

    xpath选择器简介及如何使用 一.总结 一句话总结:XPath 的全称是 XML Path Language,即 XML 路径语言,它是一种在结构化文档(比如 XML 和 HTML 文档)中定位信息 ...

  9. HDU-1007-最小公共点对

    http://acm.hdu.edu.cn/showproblem.php?pid=1007 Quoit Design Time Limit: 10000/5000 MS (Java/Others)  ...

  10. Kestrel 服务器部署多站点问题 (nginx 反向代理)

    Kestrel 作为微软的跨平台 web 服务器,有些地方用的好不是很熟. 作为一款嵌套到 dll 中的进程级 web 服务器,在同一台服务器上部署多站点确实还存在一点问题. 今天采用 nginx 做 ...