public static String bytesToHexString(byte[] src) { StringBuilder builder = new StringBuilder(); if (src == null || src.length <= 0) { return ""; } char[] buffer = new char[2]; for (int i = 0; i < src.length; i++) { buffer[0] = Character.forDigit((src[i] >>> 4) & 0x0F, 16); buffer[1] = Character.forDigit(src[i] & 0x0F, 16); builder.append(buffer); } return builder.toString().toUpperCase(); }
时间: 2024-04-29 07:20:43 浏览: 115
这是一个Java方法,用于将字节数组转换为十六进制字符串。
方法的参数是一个字节数组 src,方法会遍历字节数组中的每一个字节,将每个字节转换为两个十六进制字符,并拼接在一起,最终返回一个十六进制字符串。
具体实现过程如下:
1. 首先判断字节数组 src 是否为空或长度为0,如果是,直接返回空字符串。
2. 定义一个 StringBuilder 对象 builder,用于存储转换后的十六进制字符串。
3. 定义一个 char 数组 buffer,长度为2,用于存储每个字节转换后的两个十六进制字符。
4. 遍历字节数组 src,对于每个字节,分别进行以下操作:
a. 取字节的高4位,右移4位,得到一个0~15之间的整数,使用 Character.forDigit() 方法将其转换为对应的十六进制字符,放入 buffer 的第一个位置。
b. 取字节的低4位,与0x0F进行按位与操作,得到一个0~15之间的整数,使用 Character.forDigit() 方法将其转换为对应的十六进制字符,放入 buffer 的第二个位置。
c. 将 buffer 中的两个字符拼接在一起,并追加到 builder 中。
5. 遍历完成后,返回 builder 中存储的十六进制字符串,使用 toUpperCase() 方法将字符串中的字符转换为大写字母。
相关问题
public static String bytes2HexStr(byte[] src) { StringBuilder builder = new StringBuilder(); if (src == null || src.length <= 0) { return ""; } char[] buffer = new char[2]; for (int i = 0; i < src.length; i++) { buffer[0] = forDigit((src[i] >>> 4) & 0x0F, 16); buffer[1] = forDigit(src[i] & 0x0F, 16); builder.append(buffer); } return builder.toString(); }
这是一个将字节数组转换成十六进制字符串的方法,它将每一个字节转换成两个字符表示十六进制数,并将这些字符拼接成一个字符串返回。其中,forDigit() 是一个 Java 内置方法,用于将一个数字转换成指定进制下的字符。在这个方法中,它将每个字节的高四位和低四位分别转换成两个十六进制数的字符,然后将它们拼接起来,最终得到一个表示整个字节数组的十六进制字符串。
JAVA如何将一个很长的String变短,再根据短的String还原?
在JAVA中,可以使用压缩算法或哈希函数将一个长的String变短,然后再根据生成的短的String还原。
1. 使用压缩算法
可以使用Java中的GZIPInputStream和GZIPOutputStream类来进行压缩和解压,代码示例:
```java
public static String compress(String str) throws IOException {
if (str == null || str.length() == 0) {
return str;
}
ByteArrayOutputStream out = new ByteArrayOutputStream();
GZIPOutputStream gzip = new GZIPOutputStream(out);
gzip.write(str.getBytes());
gzip.close();
return new String(Base64.getEncoder().encode(out.toByteArray()));
}
public static String decompress(String str) throws IOException {
if (str == null || str.length() == 0) {
return str;
}
Base64.Decoder decoder = Base64.getDecoder();
ByteArrayInputStream in = new ByteArrayInputStream(decoder.decode(str));
GZIPInputStream gzip = new GZIPInputStream(in);
byte[] buffer = new byte[1024];
int len;
StringBuilder builder = new StringBuilder();
while ((len = gzip.read(buffer)) != -1) {
builder.append(new String(buffer, 0, len));
}
gzip.close();
return builder.toString();
}
```
上述代码中,compress方法将一个String进行压缩,返回一个经过Base64编码的字符串;decompress方法将一个经过压缩并Base64编码后的字符串解压还原成原始的String。
2. 使用哈希函数
可以使用Java中的MessageDigest类提供的哈希函数,代码示例:
```java
public static String hash(String str) throws NoSuchAlgorithmException {
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] bytes = md.digest(str.getBytes(StandardCharsets.UTF_8));
StringBuilder builder = new StringBuilder();
for (byte b : bytes) {
builder.append(String.format("%02x", b));
}
return builder.toString();
}
```
上述代码中,hash方法将一个String使用MD5哈希函数进行哈希,返回一个短的16进制字符串。由于MD5是不可逆的,无法通过哈希值还原出原始的String。
需要注意的是,在使用哈希函数时存在哈希冲突的可能,因此不能保证每个不同的String都能够生成一个唯一的哈希值。在实际应用中,可以根据具体的需求选择合适的哈希函数或压缩算法。
阅读全文