网络和Java默认是大端输出,C/C++ 是小端输出。
学一学古老的JDK的规范,将工具类命名为Bytes,呵呵。
public class Bytes {
//与业务无关的工具类,static
public static final int MASK = 0xff;
static byte[] bytesArr = new byte[4];
//byte类型 1个字节,int类型,4个字节
//(1)Java 默认是大端字节序--,所以int2Byte 向网络写的时候,需要这样--即[0]存args>>24,[1]存args>>16;[2]存args>>8;[3]存args>>0;
//(2)方便读取的时候高低位的字节数拼接
public static byte[] int2Byte(int args){
for(int i=0;i<4;i++){
int _offset = 4 - 1 - i;
int offset = _offset * 8;
bytesArr[i]/*低地址存高位字节*/ = (byte)((args>>offset)&MASK);
}
return bytesArr;
}
public static int byte2Int(byte[] bytesArr){
int temp = 0;
int n =0;//(为什么是0,而不是其他的1或2?因为要与后面的 temp 相或,如果是其他的,就会与原来的数有差别。)
//大端字节,按照顺序取,取出来的,就是从高位--> 低位的顺序了。
for(int i = 0;i<4;i++){
n <<= 8;
temp = bytesArr[i]&MASK;
n |= temp;
}
return n;
}
}
测试类:
public class TestMain {
public static void main(String[] args){
int a = 1527;
int b = 0;
byte[] results = Bytes.int2Byte(a);
for(int i=0;i<results.length;i++){
System.out.print("**" + results[i] + " ");
}
System.out.println();
b = Bytes.byte2Int(results);
System.out.print(b);
}
}
结果:
**0 **0 **5 **-9
1527