Arrays.java
3.35 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
/*
* Copyright (C) 2015 The Telink Bluetooth Light Project
*
*/
package com.telink.util;
import java.io.UnsupportedEncodingException;
import java.util.Formatter;
/**
* 数组工具类
*/
public final class Arrays {
private Arrays() {
}
/**
* 反转byte数组
*
* @param a
* @return
*/
public static byte[] reverse(byte[] a) {
if (a == null)
return null;
int p1 = 0, p2 = a.length;
byte[] result = new byte[p2];
while (--p2 >= 0) {
result[p2] = a[p1++];
}
return result;
}
/**
* 反转byte数组中的某一段
*
* @param arr
* @param begin
* @param end
* @return
*/
public static byte[] reverse(byte[] arr, int begin, int end) {
while (begin < end) {
byte temp = arr[end];
arr[end] = arr[begin];
arr[begin] = temp;
begin++;
end--;
}
return arr;
}
/**
* 比较两个byte数组中的每一项值是否相等
*
* @param array1
* @param array2
* @return
*/
public static boolean equals(byte[] array1, byte[] array2) {
if (array1 == array2) {
return true;
}
if (array1 == null || array2 == null || array1.length != array2.length) {
return false;
}
for (int i = 0; i < array1.length; i++) {
if (array1[i] != array2[i]) {
return false;
}
}
return true;
}
public static String bytesToString(byte[] array) {
if (array == null) {
return "null";
}
if (array.length == 0) {
return "[]";
}
StringBuilder sb = new StringBuilder(array.length * 6);
sb.append('[');
sb.append(array[0]);
for (int i = 1; i < array.length; i++) {
sb.append(", ");
sb.append(array[i]);
}
sb.append(']');
return sb.toString();
}
public static String bytesToString(byte[] data, String charsetName) throws UnsupportedEncodingException {
return new String(data, charsetName);
}
/**
* byte数组转成十六进制字符串
*
* @param array 原数组
* @param separator 分隔符
* @return
*/
public static String bytesToHexString(byte[] array, String separator) {
if (array == null || array.length == 0)
return "";
StringBuilder sb = new StringBuilder();
Formatter formatter = new Formatter(sb);
formatter.format("%02X", array[0]);
for (int i = 1; i < array.length; i++) {
if (!Strings.isEmpty(separator))
sb.append(separator);
formatter.format("%02X", array[i]);
}
formatter.flush();
formatter.close();
return sb.toString();
}
public static byte[] hexToBytes(String hexStr) {
int length = hexStr.length() / 2;
byte[] result = new byte[length];
for (int i = 0; i < length; i++) {
result[i] = (byte) Integer.parseInt(hexStr.substring(i * 2, i * 2 + 2), 16);
}
return result;
}
}