Java中byte数组与int类型的转换,在网络编程中这个算法是最基本的算法,我们都知道,在socket传输中,发送、者接收的数据都是 byte数组,但是int类型是4个byte组成的,如何把一个整形int转换成byte数组,同时如何把一个长度为4的byte数组转换为int类型。下面有两种方式。
方法一
/** * int到byte[] * @param i * @return */ public static byte[] intToByteArray(int i) { byte[] result = new byte[4]; // 由高位到低位 result[0] = (byte) ((i >> 24) & 0xFF); result[1] = (byte) ((i >> 16) & 0xFF); result[2] = (byte) ((i >> 8) & 0xFF); result[3] = (byte) (i & 0xFF); return result; } /** * byte[]转int * @param bytes * @return */ public static int byteArrayToInt(byte[] bytes) { int value = 0; // 由高位到低位 for (int i = 0; i < 4; i++) { int shift = (4 - 1 - i) * 8; value += (bytes[i] & 0x000000FF) << shift;// 往高位游 } return value; } public static void main(String[] args) { byte[] b = intToByteArray(128); System.out.println(Arrays.toString(b)); int i = byteArrayToInt(b); System.out.println(i); }
方法二
/** * 此方法可以对string类型,float类型,char类型等 来与 byte类型的转换 * @param args */ public static void main(String[] args) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); DataOutputStream dos = new DataOutputStream(baos); try { // int转换byte数组 dos.writeByte(-12); dos.writeLong(12); dos.writeChar('1'); dos.writeFloat(1.01f); dos.writeUTF("好"); } catch (IOException e) { e.printStackTrace(); } byte[] aa = baos.toByteArray(); ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); DataInputStream dis = new DataInputStream(bais); // byte转换int try { System.out.println(dis.readByte()); System.out.println(dis.readLong()); System.out.println(dis.readChar()); System.out.println(dis.readFloat()); System.out.println(dis.readUTF()); } catch (IOException e) { e.printStackTrace(); } try { dos.close(); dis.close(); } catch (IOException e) { e.printStackTrace(); } }
补充
方法1中的 int到byte[],还可以使用下面的ByteBuffer方式,结果一样,实例如下
import java.nio.ByteBuffer; public class RandomUtil { public static byte[] intToByteArray(int i) { byte[] result = new byte[4]; // 由高位到低位 result[0] = (byte) ((i >> 24) & 0xFF); result[1] = (byte) ((i >> 16) & 0xFF); result[2] = (byte) ((i >> 8) & 0xFF); result[3] = (byte) (i & 0xFF); return result; } public static void main(String[] args) { int v = 123456; byte[] bytes = ByteBuffer.allocate(4).putInt(v).array(); for (byte t : bytes) { System.out.println(t); } System.out.println("----- 分割线 -------"); byte[] bytes2 = intToByteArray(v); for (byte t : bytes2) { System.out.println(t); } } } 输出 0 1 -30 64 ----- 分割线 ------- 0 1 -30 64