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. Spring4.2.3+Hibernate4.3.11整合( IntelliJ maven项目)

    1. 在IntelliJ中新建maven项目 给出一个建好的示例 2. 在pom.xml中配置依赖 包括: spring-context spring-orm hibernate-core mysql ...

  2. libvirt-qemu-虚拟机设备热插拔

    cpu热插拔 # virsh setvcpus $domain_name --count 4 --live (--config可写入配置文件永久保存) #前提条件和后续激活参考<libvirt- ...

  3. 【Java Web】入门资源整理

    [网站] 1.Java Web Application Tutorial for Beginners - JournalDev Google top1 除Java Web还有很多其他教程 2.Intr ...

  4. 使用Python实现基于图像识别的iOS自动化测试

    相对于Android来说,iOS比较封闭.这一点,在设计和评估自动化测试方案的时候感觉尤其强烈.iOS平台上没有特别好用的自动化测试工具.苹果针对iOS提供了UI Automation的Instrum ...

  5. 20145109 《Java实验报告1》

    Experiment Ⅰ --getting familiar with JDK (Linux + Eclipse) Content 1.Compile and run easy Java progr ...

  6. Redis单线程原理

    redis是以socket方式通信,socket服务端可同时接受多个客户端请求连接,也就是说,redis服务同时面对多个redis客户端连接请求,而redis服务本身是单线程运行. 假设,现在有A,B ...

  7. Spring Cloud 微服务开放平台接口

    github源码地址:https://github.com/spring-cloud/spring-cloud-security 前言: 什么是开放平台接口 场景 : 总公司与子公司 对接接口  还有 ...

  8. spring半自动代理

    1.被代理类接口Person.java package com.xiaostudy; /** * @desc 被代理类接口 * * @author xiaostudy * */ public inte ...

  9. JAVA中的数据存储(堆及堆栈)- 转载

    1.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制.2. 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(对象可 ...

  10. MD5加密算法的java实现

    package other; import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;/* * ...