Java与二进制

关于二进制参考【Linux】Linux 计算机基础

进制转换

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//十进制转为其他进制
Integer.toBinaryString(112)
//二进制
Integer.toHexString(112)
//十六进制
Integer.toOctalString(112)
//八进制
//其他进制转为十进制
Integer.parseInt("110101",2)
Integer.parseInt("F6889",16)
Integer.parseInt("76541",8)
//其他进制转为十进制
Integer.valueOf("110101",2)
Integer.valueOf("F6889",16)
Integer.valueOf("76541",8)

Java数据类型和字节的转换

在平时的Java开发中,进制转换和位操作用的不多,但是在跨平台中用的较多,比如文件读写、数据通信

如果Java客户端和Java服务器通信,可以使用序列和反序列serializable,而如果Java客户端和C服务器通信则需要转换为字节

Java的基本数据类型包括:

  1. int数据类型:byte(8bit,-128~127)、short(16bit)、int(32bit)、long(64bit)
  2. float数据类型:单精度(32bit,float)、双精度(64bit,double)
  3. boolean数据类型(true、false)
  4. char数据类型:unicode字符 16位

基本数据类型和字节的转换

小端法(LIttle-Endian):低位字节排放在内存的低地址端即该值的起始地址,高位字节排放在内存的高地址端
大端法(Big-Endian):高位字节排放在内存的底地址端即该值的起始地址,低位字节排放在内存的高地址端

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
/**
* int 转 字节数组
* @param x
* @return
*/
public static byte[] int2byte(int x){
byte[] bytes = new byte[4];
//int型长度为4个字节
for(int i = 0;i<bytes.length;i++){
bytes[i] = (byte)((x>>i*8) & 0xff);
}
return bytes;
}
/**
* long 转 字节数组
* @param x
* @return
*/
public static byte[] long2byte(long x){
byte[] bytes = new byte[8];
//long型长度为8个字节
for(int i = 0;i<bytes.length;i++){
bytes[i] = (byte)((x>>i*8) & 0xff);
}
return bytes;
}
/**
* 字节数组 转 int
* @param bytes
* @return
*/
public static int byte2int(byte[] bytes){
int result = 0;
for(int i=0;i<bytes.length;i++){
result += (bytes[i] & 0xff) << i*8;
}
return result;
}

字符串和字节的转换

1
2
3
4
5
6
7
8
9
10
11
12
//字符串转字节数组
String s = "hello";
byte[] bs = s.getBytes();
for(int i =0;i<bs.length;i++){
System.out.println(bs[i]);
}
//字节数组转字符串
String ss = new String(bs);
String sss = new String(bs,encode);//encode指编码方式,比如 gb2312 utf-8
System.out.println(ss);