1 import org.springframework.stereotype.Component;
2 import org.springframework.util.StringUtils;
3
4 import java.io.*;
5
6 /**
7 * byte和各种数据类型之间的转换
8 *
9 * @author zy
10 * @date 2020-07-15 17:30
11 */
12 @Component
13 public class ByteUtil {
14
15 /**
16 * 1、16进制转(字符串)byte
17 *
18 * @param hexString 16进制字符串
19 * @return byte
20 */
21 public static byte[] hexStringToByte(String hexString) {
22 //方法1
23 if (StringUtils.isEmpty(hexString)) {
24 return null;
25 }
26 hexString = hexString.toUpperCase();
27 int length = hexString.length() / 2;
28 char[] hexChars = hexString.toCharArray();
29 byte[] d = new byte[length];
30 for (int i = 0; i < length; i++) {
31 int pos = i * 2;
32 d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1]));
33 }
34 return d;
35 //方法2
36 // hexString = hexString.replaceAll(" ", "");
37 // int len = hexString.length();
38 // byte[] bytes = new byte[len / 2];
39 // for (int i = 0; i < len; i += 2) {
40 // // 两位一组,表示一个字节,把这样表示的16进制字符串,还原成一个字节
41 // bytes[i / 2] = (byte) ((Character.digit(hexString.charAt(i), 16) << 4) + Character
42 // .digit(hexString.charAt(i + 1), 16));
43 // }
44 // return bytes;
45 //方法3
46 // hexString = hexString.replaceAll(" ", "");
47 // final byte[] byteArray = new byte[hexString.length() / 2];
48 // int k = 0;
49 // for (int i = 0; i < byteArray.length; i++) {//因为是16进制,最多只会占用4位,转换成字节需要两个16进制的字符,高位在先
50 // byte high = (byte) (Character.digit(hexString.charAt(k), 16) & 0xff);
51 // byte low = (byte) (Character.digit(hexString.charAt(k + 1), 16) & 0xff);
52 // byteArray[i] = (byte) (high << 4 | low);
53 // k += 2;
54 // }
55 // return byteArray;
56 }
57
58 /**
59 * 2、char转byte
60 *
61 * @param c 字符
62 * @return byte
63 */
64 public static byte charToByte(char c) {
65 return (byte) "0123456789ABCDEF".indexOf(c);
66 }
67
68 /**
69 * 3、文件转byte
70 *
71 * @param filePath 文件路径
72 * @return byte
73 */
74 public static byte[] file2byte(String filePath) {
75 File tradeFile = new File(filePath);
76 byte[] buffer = null;
77 try {
78 FileInputStream fis = new FileInputStream(tradeFile);
79 ByteArrayOutputStream bos = new ByteArrayOutputStream();
80 byte[] b = new byte[1024];
81 int n;
82 while ((n = fis.read(b)) != -1) {
83 bos.write(b, 0, n);
84 }
85 fis.close();
86 bos.close();
87 buffer = bos.toByteArray();
88 } catch (IOException e) {
89 e.printStackTrace();
90 }
91 return buffer;
92 }
93
94 /**
95 * 4、int转byte
96 *
97 * @param i int数据
98 * @return byte
99 */
100 public static byte[] intToByteArray(int i) {
101 byte[] result = new byte[4];
102 result[0] = (byte) ((i >> 24) & 0xFF);
103 result[1] = (byte) ((i >> 16) & 0xFF);
104 result[2] = (byte) ((i >> 8) & 0xFF);
105 result[3] = (byte) (i & 0xFF);
106 return result;
107 }
108
109 }