package com.ard.utils;
|
|
import javax.xml.bind.DatatypeConverter;
|
import java.nio.ByteBuffer;
|
import java.util.ArrayList;
|
import java.util.Arrays;
|
import java.util.List;
|
|
/**
|
* @Description: 字节工具类
|
* @ClassName: byteUtils
|
* @Author: 刘苏义
|
* @Date: 2023年07月03日15:18
|
* @Version: 1.0
|
**/
|
public class ByteUtils {
|
/**
|
* Byte字节转Hex
|
* @param b 字节
|
* @return Hex
|
*/
|
public static String byteToHex(byte b)
|
{
|
String hexString = Integer.toHexString(b & 0xFF);
|
//由于十六进制是由0~9、A~F来表示1~16,所以如果Byte转换成Hex后如果是<16,就会是一个字符(比如A=10),通常是使用两个字符来表示16进制位的,
|
//假如一个字符的话,遇到字符串11,这到底是1个字节,还是1和1两个字节,容易混淆,如果是补0,那么1和1补充后就是0101,11就表示纯粹的11
|
if (hexString.length() < 2)
|
{
|
hexString = new StringBuilder(String.valueOf(0)).append(hexString).toString();
|
}
|
return hexString.toUpperCase();
|
}
|
/**
|
* byte数组转float
|
*/
|
public static float bytesToFloat(byte[] bytes) {
|
ByteBuffer buffer = ByteBuffer.wrap(bytes);
|
return buffer.getFloat();
|
}
|
/**
|
* byte数组转整型
|
*/
|
public static int bytesToDecimal(byte[] byteArray) {
|
int decimalValue = 0;
|
|
for (int i = 0; i < byteArray.length; i++) {
|
decimalValue = (decimalValue << 8) | (byteArray[i] & 0xFF);
|
}
|
|
return decimalValue;
|
}
|
|
/**
|
* byte数组转Double
|
*/
|
public static double bytesToDouble(byte[] byteArray) {
|
long longBits = 0;
|
|
// 根据字节数组的长度和字节顺序,将字节数组转换为长整型
|
for (int i = 0; i < byteArray.length; i++) {
|
longBits |= (long) (byteArray[i] & 0xFF) << (8 * (byteArray.length - 1 - i));
|
}
|
|
// 使用Double.longBitsToDouble方法将长整型转换为Double类型
|
return Double.longBitsToDouble(longBits);
|
}
|
|
/**
|
* 大端转小端
|
*/
|
public static byte[] toLittleEndian(byte[] bigEndianBytes) {
|
byte[] littleEndianBytes = new byte[bigEndianBytes.length];
|
|
for (int i = 0; i < bigEndianBytes.length; i++) {
|
int j = bigEndianBytes.length - i - 1;
|
littleEndianBytes[i] = bigEndianBytes[j];
|
}
|
|
return littleEndianBytes;
|
}
|
|
}
|