在实践中经常会遇到两个btye数组合并成一个,或者多个byte数组合并成一个,以及int类型转byte数组,逆向的byte数组转int类型。
下面汇总了上述相关功能的方法,提供了对应的工具类,直接查看源码或更多的工具类可关注公众号“程序新视界”,回复“1005”获得。
下面是对应工具类的代码:
package com.choupangxia.bytes; /** * Byte相关公共处理工具 * <br/> * 关注公众号:程序新视界;回复"1005"获得更多工具类 * * @author sec * @version 1.0 * @date 2020/12/22 **/ public class ByteUtil { /** * 合并两个字节数组到一个字节数组 * * @param data1 字节数组1 * @param data2 字节数组2 * @return byte[] 合并后的字节数字 */ public static byte[] mergeBytes(byte[] data1, byte[] data2) { byte[] result = new byte[data1.length + data2.length]; System.arraycopy(data1, 0, result, 0, data1.length); System.arraycopy(data2, 0, result, data1.length, data2.length); return result; } /** * 合并多个字节数组到一个字节数组 * * @param values 动态字节数字参数 * @return byte[] 合并后的字节数字 */ private static byte[] mergeBytes(byte[]... values) { int lengthByte = 0; for (byte[] value : values) { lengthByte += value.length; } byte[] allBytes = new byte[lengthByte]; int countLength = 0; for (byte[] b : values) { System.arraycopy(b, 0, allBytes, countLength, b.length); countLength += b.length; } return allBytes; } /** * 将int数值转换为占四个字节的byte数组,本方法适用于(低位在前,高位在后)的顺序。 * 和bytesToInt()配套使用 * * @param value 要转换的int值 * @return byte数组 */ public static byte[] intToBytesLowAhead(int value) { byte[] src = new byte[4]; src[3] = (byte) ((value >> 24) & 0xFF); src[2] = (byte) ((value >> 16) & 0xFF); src[1] = (byte) ((value >> 8) & 0xFF); src[0] = (byte) (value & 0xFF); return src; } /** * 将int数值转换为占四个字节的byte数组,本方法适用于(高位在前,低位在后)的顺序。 * 和bytesToInt2()配套使用 */ public static byte[] intToBytesHighAhead(int value) { byte[] src = new byte[4]; src[0] = (byte) ((value >> 24) & 0xFF); src[1] = (byte) ((value >> 16) & 0xFF); src[2] = (byte) ((value >> 8) & 0xFF); src[3] = (byte) (value & 0xFF); return src; } /** * byte数组中取int数值,本方法适用于(低位在前,高位在后)的顺序,和和intToBytes()配套使用 * * @param src byte数组 * @param offset 从数组的第offset位开始 * @return int数值 */ public static int bytesToIntLowAhead(byte[] src, int offset) { return (src[offset] & 0xFF) | ((src[offset + 1] & 0xFF) << 8) | ((src[offset + 2] & 0xFF) << 16) | ((src[offset + 3] & 0xFF) << 24); } /** * byte数组中取int数值,本方法适用于(低位在后,高位在前)的顺序。和intToBytes2()配套使用 */ public static int bytesToIntHighAhead(byte[] src, int offset) { return ((src[offset] & 0xFF) << 24) | ((src[offset + 1] & 0xFF) << 16) | ((src[offset + 2] & 0xFF) << 8) | (src[offset + 3] & 0xFF); } }