Android串口通信10进制转16进制
来源:互联网 发布:位面小蝴蝶知乎 编辑:程序博客网 时间:2024/06/06 14:18
有大半年没更新了哈,现在要回归了。
情景:
之前由于工作需要,用到串口通信。在用网上谷歌开源的串口通信代码向串口发送指令时,由于机器接收的是16进制的指令。后来发现初始16进制的byte数组经过一系列转换后,变成了10进制的byte数组,当使用OutputStream的write方法向串口发送该数组时,机器没有反应。
后来心中便猜想是不是write(1)和write(0x01)到机器那边是不是不一样的数据。结果后来测试果然是不一样的。于是就需要想办法把10进制的byte数组转换成16进制。
网上查了很多资料,很多博客都是使用Integer.toHexString()来转换,但是这只是转换成16进制字符串显示,实际上还是和原始的byte16进制数组不一样的,即使使用转换后的String.getBytes[]也是一样。
解决方案:
经过查询,系统api里并没有10进制转换成16进制的方法,因此这里自己写出转换的方法。
/** * 普通字符转换成16进制字符串 * @param str * @return */ public static String str2HexStr(String str) { byte[] bytes = str.getBytes(); // 如果不是宽类型的可以用Integer BigInteger bigInteger = new BigInteger(1, bytes); return bigInteger.toString(16); } /** 16进制的字符串转换成16进制字符串数组 * @param src * @return */ public static byte[] HexString2Bytes(String src) { int len = src.length() / 2; byte[] ret = new byte[len]; byte[] tmp = src.getBytes(); for (int i = 0; i < len; i++) { ret[i] = uniteBytes(tmp[i * 2], tmp[i * 2 + 1]); } return ret; }public static byte uniteBytes(byte src0, byte src1) { byte _b0 = Byte.decode("0x" + new String(new byte[]{src0})).byteValue(); _b0 = (byte) (_b0 << 4); byte _b1 = Byte.decode("0x" + new String(new byte[]{src1})).byteValue(); byte ret = (byte) (_b0 ^ _b1); return ret;}/** 字节数组转16进制字符串显示*/public String bytes2HexString(byte[] b,int length) { String r = ""; for (int i = 0; i < length; i++) { String hex = Integer.toHexString(b[i] & 0xFF); if (hex.length() == 1) { hex = "0" + hex; } r += hex.toUpperCase(); } return r;}
使用方法:
1、如果原始是10进制的byte数组,则先调用byte2HexString()方法将其转换成16进制显示的String字符串,然后调用HexString2Bytes()方法得到16进制的byte数组。
2、如果原始是字符串,则调用str2HexStr()方法将其转换成16进制字符串,然后调用HexString2Byte()得到16进制byte数组。
最后,调用OutputStream对象的write()方法将数据输出。
阅读全文
0 0
- Android串口通信10进制转16进制
- Android串口通信:串口读写
- Android串口通信:串口读写
- Android串口通信
- Android Bluetooth 串口通信
- android串口通信
- android串口通信
- Android串口通信
- android串口通信
- android串口通信
- android串口通信
- android串口通信
- android串口通信
- android串口通信
- android串口通信
- 【Android】串口通信
- android串口通信实例
- Android串口通信访问
- Java中ObjectStream序列化实现
- 一、Docker在CentOS7下安装
- IntelliJ IDEA(2017)安装和破解
- 块存储、文件存储、对象存储本质区别
- struts2学习之---Convention插件与"约定"支持
- Android串口通信10进制转16进制
- Linux下的文件操作权限
- android 获取路径目录方法以及判断目录是否存在,创建目录
- java的数据类型
- Java中native关键字
- Mobilenet_YOLO
- Android给空包签名
- MySQL
- Spring对JDBC的 整合支持 \Spring+JDBC Template