| | |
| | | package com.anyun.im_lib.util; |
| | | |
| | | import android.text.TextUtils; |
| | | |
| | | import java.nio.ByteBuffer; |
| | | import java.nio.CharBuffer; |
| | | import java.nio.charset.Charset; |
| | |
| | | * All Rights Saved! Chongqing AnYun Tech co. LTD |
| | | */ |
| | | public class ByteUtil { |
| | | |
| | | |
| | | /** |
| | | * @功能: BCD码转为10进制串(阿拉伯数据) |
| | | * @参数: BCD码 |
| | | * @结果: 10进制串 |
| | | */ |
| | | public static String bcd2Str(byte[] bytes) { |
| | | StringBuffer temp = new StringBuffer(bytes.length * 2); |
| | | for (int i = 0; i < bytes.length; i++) { |
| | | temp.append((byte) ((bytes[i] & 0xf0) >>> 4)); |
| | | temp.append((byte) (bytes[i] & 0x0f)); |
| | | } |
| | | return temp.toString().substring(0, 1).equalsIgnoreCase("0") ? temp |
| | | .toString().substring(1) : temp.toString(); |
| | | } |
| | | |
| | | /** |
| | | * @功能: 10进制串转为BCD码 |
| | | * @参数: 10进制串 |
| | | * @结果: BCD码 |
| | | */ |
| | | public static byte[] str2Bcd(String asc) { |
| | | int len = asc.length(); |
| | | int mod = len % 2; |
| | | if (mod != 0) { |
| | | asc = "0" + asc; |
| | | len = asc.length(); |
| | | } |
| | | byte abt[] = new byte[len]; |
| | | if (len >= 2) { |
| | | len = len / 2; |
| | | } |
| | | byte bbt[] = new byte[len]; |
| | | abt = asc.getBytes(); |
| | | int j, k; |
| | | for (int p = 0; p < asc.length() / 2; p++) { |
| | | if ((abt[2 * p] >= '0') && (abt[2 * p] <= '9')) { |
| | | j = abt[2 * p] - '0'; |
| | | } else if ((abt[2 * p] >= 'a') && (abt[2 * p] <= 'z')) { |
| | | j = abt[2 * p] - 'a' + 0x0a; |
| | | } else { |
| | | j = abt[2 * p] - 'A' + 0x0a; |
| | | } |
| | | if ((abt[2 * p + 1] >= '0') && (abt[2 * p + 1] <= '9')) { |
| | | k = abt[2 * p + 1] - '0'; |
| | | } else if ((abt[2 * p + 1] >= 'a') && (abt[2 * p + 1] <= 'z')) { |
| | | k = abt[2 * p + 1] - 'a' + 0x0a; |
| | | } else { |
| | | k = abt[2 * p + 1] - 'A' + 0x0a; |
| | | } |
| | | int a = (j << 4) + k; |
| | | byte b = (byte) a; |
| | | bbt[p] = b; |
| | | } |
| | | return bbt; |
| | | } |
| | | |
| | | public static String getString(byte[] bytes, String charsetName) { |
| | | return new String(bytes, Charset.forName(charsetName)); |
| | | } |
| | | |
| | | public static String getString(byte[] bytes) { |
| | | return getString(bytes, "GBK"); |
| | | } |
| | | |
| | | /** |
| | | * 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[n] & 0xFF); |
| | | sb.append((stmp.length()==1)? "0"+stmp : stmp); |
| | | // sb.append(" "); |
| | | } |
| | | return sb.toString().toUpperCase().trim(); |
| | | } |
| | | |
| | | /** |
| | | * bytes字符串转换为Byte值 |
| | | * @param String src Byte字符串,每个Byte之间没有分隔符 |
| | | * @return byte[] |
| | | */ |
| | | public static byte[] hexStr2Bytes(String src) |
| | | { |
| | | int m=0,n=0; |
| | | int l=src.length()/2; |
| | | System.out.println(l); |
| | | byte[] ret = new byte[l]; |
| | | for (int i = 0; i < l; i++) |
| | | { |
| | | m=i*2+1; |
| | | n=m+1; |
| | | ret[i] = Byte.decode("0x" + src.substring(i*2, m) + src.substring(m,n)); |
| | | } |
| | | return ret; |
| | | } |
| | | |
| | | /** |
| | | * 16进制的字符串表示转成字节数组 |
| | | * |
| | | * @param hexString 16进制格式的字符串 |
| | | * @return 转换后的字节数组 |
| | | **/ |
| | | public static byte[] toByteArray(String hexString) { |
| | | if (TextUtils.isEmpty(hexString)) |
| | | throw new IllegalArgumentException("this hexString must not be empty"); |
| | | |
| | | hexString = hexString.toLowerCase(); |
| | | final byte[] byteArray = new byte[hexString.length() / 2]; |
| | | int k = 0; |
| | | for (int i = 0; i < byteArray.length; i++) {//因为是16进制,最多只会占用4位,转换成字节需要两个16进制的字符,高位在先 |
| | | byte high = (byte) (Character.digit(hexString.charAt(k), 16) & 0xff); |
| | | byte low = (byte) (Character.digit(hexString.charAt(k + 1), 16) & 0xff); |
| | | byteArray[i] = (byte) (high << 4 | low); |
| | | k += 2; |
| | | } |
| | | return byteArray; |
| | | } |
| | | |
| | | |
| | | public static int getInt(byte i) { |
| | | int low = i&0x0f; |
| | | int hight= (i>>4)&0x0f; |
| | | return low+hight*16; |
| | | } |
| | | |
| | | public static int getBCDInt(byte i) { |
| | | int low = i&0x0f; |
| | | int hight= (i>>4)&0x0f; |
| | | return low+hight*10; |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | /** |
| | | * ByteBuffer 转换 String |
| | | * @param buffer |