Android开发中遇到的字符串、十六进制和Byte转换,及十六进制校验等函数集
2016-03-11 18:51
507 查看
import java.io.UnsupportedEncodingException; public class EncodingConversionTools { /** * 字符串转换成十六进制字符串(转GBK编码) * @param String str 待转换的ASCII字符串 * @return String 如: [616C6B] */ public static String str2HexStr(String str) { char[] chars = "0123456789ABCDEF".toCharArray(); StringBuilder sb = new StringBuilder(""); byte[] bs = null; try { bs = str.getBytes("GBK"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } int bit; for (int i = 0; i < bs.length; i++) { bit = (bs[i] & 0x0f0) >> 4; sb.append(chars[bit]); bit = bs[i] & 0x0f; sb.append(chars[bit]); } return sb.toString().trim(); } /** * 生成16进制累加和校验码 * @param data * 除去校验位的数据 * @return */ public static String makeChecksum(String data) { int total = 0; int len = data.length(); int num = 0; while (num < len) { String s = data.substring(num, num + 2); total += Integer.parseInt(s, 16); num = num + 2; } /** * 用65535求余最大是65534,即16进制的FFFF */ int mod = total % 65535; String hex = Integer.toHexString(mod); len = hex.length(); // 如果不够校验位的长度,补0 switch (len) { case 1: hex = "000" + hex; break; case 2: hex = "00" + hex; break; case 3: hex = "0" + hex; break; default: break; } return hex; } public static byte[] HexString2Bytes(String src) { int lenth = src.length() / 2; byte[] ret = new byte[lenth]; byte[] tmp = src.getBytes(); for (int i = 0; i < lenth; 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; } public static String getHexStr(String str) { String rtn = ""; String hexStr = "0123456789ABCDEF"; str = str.toUpperCase(); for (int i = 0; i < str.length(); i++) { if (hexStr.indexOf(str.charAt(i)) != -1) { rtn = rtn + str.charAt(i); } } return rtn; } /** * bytes转换成十六进制字符串 * @param byte[] b byte数组 * @return String 每个Byte值之间空格分隔 */ public static String byte2HexStr(byte[] b) { String stmp = ""; StringBuilder sb = new StringBuilder(""); for (int n = 0; n < b.length; n++) { stmp = Integer.toHexString(b & 0xFF); sb.append((stmp.length() == 1) ? "0" + stmp : stmp); sb.append(" "); } return sb.toString().toUpperCase().trim(); } }
相关文章推荐
- android错误之MediaPlayer用法的Media Player called in state *,androidmediaplayer
- Android模拟器上网
- android PhoneGap跨平台笔记1--helloword
- Android 中常见的小知识总结
- Android之自定义属性
- Android Support Design Library - CoordinatorLayout
- android中的文件(图片)上传
- android开发50个小技巧
- android开发之应用Crash自动抓取Log_自动保存崩溃日志到本地
- android CoordinatorLayout使用
- 升级Android ADT 和SDK
- Android当中的多线程及AsyncTask
- Android应用如何开机自启动、自启动失败原因
- android的sql表单新增字段- alter table
- Android Studio获取SHA1、MD5以及申请第三方平台key
- Android快速开发OrmLite数据库封装详解
- android 对话框(三)DatePickerDialog和TimePickerDialog
- MVP前奏(二)MVC在Android的小短腿
- Android调试方法及常用工具logCat的介绍
- Android 镜像地址[持续更新中]