最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
java Socket获取十六进制数据转整数和字符串
时间:2016-08-22 编辑:简简单单 来源:一聚教程网
最近在开发中使用到java对接一个体温检测设备,业务是用过扫描二维码确认身份,然后检测体温,最后提交到服务器,过程中使用到了十六进制字符串和整数、字符串、汉字等之间的互相转换。
socket接收代码:
代码如下 | 复制代码 |
InputStream input = null; |
接着分享一下转换代码:
代码如下 | 复制代码 |
public static int bytesToInt(byte[] bRefArr) { int iOutcome = 0; byte bLoop; for (int i = 0; i < bRefArr.length; i++) { bLoop = bRefArr[i]; iOutcome += (bLoop & 0xFF) << (8 * i); } return iOutcome; } public static final String bytesToHexString(byte[] bArray) { StringBuffer sb = new StringBuffer(bArray.length); String sTemp; for (int i = 0; i < bArray.length; i++) { sTemp = Integer.toHexString(0xFF & bArray[i]); if (sTemp.length() < 2) sb.append(0); sb.append(sTemp.toUpperCase()); } return sb.toString(); } // byte数字转字符串 public static String printHexString(byte[] b) { String hexs = ""; for (int i = 0; i < b.length; i++) { String hex = Integer.toHexString(b[i] & 0xFF); if (hex.length() == 1) { hex = '0' + hex; } hexs += hex; } return hexs; } /* * 16进制字符串转整形 */ public static int OxStringtoInt(String ox) throws Exception { ox = ox.toLowerCase(); if (ox.startsWith("0x")) { ox = ox.substring(2, ox.length()); } Integer ri = 0; Integer oxlen = ox.length(); for (int i = 0; i < oxlen; i++) { char c = ox.charAt(i); int h; if (('0' <= c && c <= '9')) { h = c - 48; } else if (('a' <= c && c <= 'f')) { h = c - 87; } else if ('A' <= c && c <= 'F') { h = c - 55; } else { throw (new Exception("not a integer ")); } byte left = (byte) ((oxlen - i - 1) * 4); ri |= (h << left); } return ri; } // 16进制转字符串 public static String hexString2String(String src) { String temp = ""; for (int i = 0; i < src.length() / 2; i++) { temp = temp + (char) Integer.valueOf(src.substring(i * 2, i * 2 + 2), 16).byteValue(); } return temp; } // 整数转byte数组 public static byte[] intTobytes(int var) { byte[] b = new byte[2]; // b[0]=(byte)(var>>24); // b[1]=(byte)(var>>16); // b[2]=(byte)(var>>8); // b[3]=(byte)(var); b[0] = (byte) (var >> 8); b[1] = (byte) (var); return b; } /** * 生成16进制累加和校验码 * * @param data 除去校验位的数据 * @return */ public static String makeChecksum(String data) { if (StringUtils.isEmpty(data)) { return ""; } 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; } /** * 用256求余最大是255,即16进制的FF */ int mod = total; String hex = Integer.toHexString(mod & 0xFF); len = hex.length(); //如果不够校验位的长度,补0,这里用的是两位校验 if (len < 2) { hex = "0" + hex; } return hex; } /** * 16进制字符串转换成byte数组 * @param 16进制字符串 * @return 转换后的byte数组 */ public static byte[] hex2Byte(String hex) { String digital = "0123456789ABCDEF"; char[] hex2char = hex.toCharArray(); byte[] bytes = new byte[hex.length() / 2]; int temp; for (int i = 0; i < bytes.length; i++) { // 其实和上面的函数是一样的 multiple 16 就是右移4位 这样就成了高4位了 // 然后和低四位相加, 相当于 位操作"|" //相加后的数字 进行 位 "&" 操作 防止负数的自动扩展. {0xff byte最大表示数} temp = digital.indexOf(hex2char[2 * i]) * 16; temp += digital.indexOf(hex2char[2 * i + 1]); bytes[i] = (byte) (temp & 0xff); } return bytes; } |
-
上一个: Java注解处理器的详细介绍
相关文章
- SpringBoot测试配置属性与web启动环境解析 10-24
- vue中将el-switch值true、false改为number类型的1和0解析 10-24
- Vue中的路由配置项meta使用解读 10-24
- SpringBoot自定义bean绑定解析 10-24
- SpringBoot常用计量与bean属性校验和进制数据转换规则解析 10-24
- 工厂方法在Spring框架中的运用介绍 10-24