int在java中占四个字节,所以转化为字节数组时应该是长度为4的数组。
例如下面一个正整数的二进制表达方式
因此主要的工作是把各个位置的数字转为字节。
方法一:
通过java提供的位运算符>> 和 &
int a = 1;
System.out.println("int=" + a);
System.out.println("方法一:");
byte[] bytes = new byte[4];
bytes[0] = (byte) ((a >> 24) & 0xFF);
bytes[1] = (byte) ((a >> 16) & 0xFF);
bytes[2] = (byte) ((a >> 8) & 0xFF);
bytes[3] = (byte) ((a) & 0xFF);
System.out.println("数组内容:");
for (byte aByte : bytes) {
System.out.println(aByte);
}
结果:
int=1
方法一:
数组内容:
0
0
0
1
方法二:
直接把对应8位的16进制字符转为byte
int a = 1;
System.out.println("int=" + a);
System.out.println("方法二:");
//转16进制字符
String hexString = Integer.toHexString(a);
while (hexString.length() < 8) {
hexString = "0" + hexString;
}
System.out.println("16进制-->0x" + hexString);
byte[] bytes = new byte[4];
for (int i = 0; i < hexString.length(); i += 2) {
bytes[i / 2] = (byte) Integer.parseInt(hexString.substring(i, i + 2), 16);
}
System.out.println("数组内容:");
for (byte aByte : bytes) {
System.out.println(aByte);
}
结果:
int=1
方法二:
16进制-->0x00000001
数组内容:
0
0
0
1
byte[] 转为int的方法:
int a = 666;
System.out.println("原数值=" + a);
byte[] bytes = new byte[4];
bytes[0] = (byte) ((a >> 24) & 0xFF);
bytes[1] = (byte) ((a >> 16) & 0xFF);
bytes[2] = (byte) ((a >> 8) & 0xFF);
bytes[3] = (byte) ((a) & 0xFF);
//利用拼凑16进制字符-->转int
char[] hexs = new char[]{'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
StringBuffer sb = new StringBuffer();
for (int i = 0; i < bytes.length; i++) {
sb.append(hexs[bytes[i]>>4 & 0xf]);
sb.append(hexs[bytes[i] & 0xf]);
}
int b = Integer.parseInt(sb.toString(), 16);
System.out.println("转换结果="+b);
结果:
原数值=666
转换结果=666