第一种方法: 通过大端序列方法将4个字节int转成 byte数组
大端序列方法:
int2bytes:
将int 从高到低位分别保存到 byte[0] ~ byte[3]
byte[] bytes = new byte[4];
for (int i = 0; i < bytes.length; i++) {
bytes[i] = (byte) ((val >> 8 * (3 - i)));
}
当 i =0 时, bytes[0] = (byte) ((val >> 24));
一个int 32位, 向右移动24位,高32-24=8位将移动到最低位上,通过强制byte转换,仅仅保留8个字节。
例如:01111111 00000000 00000000 00000000 --(>> 24)->00000000 00000000 00000000 01111111
bytes2int:
还原高位,即向左移动。0xff:二进制:11111111
如果 i=0, 最高位 bytes[i] & 0xff 仅仅保留 8位, 再((bytes[i] & 0xff) << (8 * 3)) 左移动24位
01111111 -》01111111 00000000 00000000 00000000
通过| 与运算 1|0 =1 0|0=0 1|1=1
val =0 二进制
00000000 00000000 00000000 00000000
01111111 00000000 00000000 00000000
通过与运算,输出01111111 00000000 00000000 00000000
int val = 0;
for (int i = 0; i < bytes.length; i++) {
val = val | ((bytes[i] & 0xff) << (8 * (3 - i)));
}
package com.john.netty.learn.ch08.test;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Arrays;
public class Test1 {
public static void main(String[] args) throws IOException {
int id = 123456789;
int age = 21;
System.out.println(Arrays.toString(int2bytes(id)));
System.out.println(Arrays.toString(int2bytes(age)));
System.out.println("id:" + bytes2int(int2bytes(id)));
System.out.println("age:" + bytes2int(int2bytes(age)));
}
/**
* 大端序列方法
*
* @param val
* @return
*/
public static byte[] int2bytes(int val) {
byte[] bytes = new byte[4];
for (int i = 0; i < bytes.length; i++) {
bytes[i] = (byte) ((val >> 8 * (3 - i)));
}
return bytes;
}
public static int bytes2int(byte[] bytes) {
int val = 0;
for (int i = 0; i < bytes.length; i++) {
val = val | ((bytes[i] & 0xff) << (8 * (3 - i)));
}
return val;
}
}
所有源码下载 :https://download.youkuaiyun.com/download/netcobol/10308871