文章目录
Java中的数据类型
基本类型有以下四种:
- int数据类型有:byte(8bit , -128~127)、short(16bit)、int(32bit)、long(64bit)
- float数据类型有:单精度(32bit float)、双精度(64bit double)
- boolean类型变量的取值有:true、false
- char数据类型有:unicode字符、16位
对应的类类型:
int类型(Integer)、float类型(Float)、boolean类型(Boolean)、char类型(Character)、doublet类型(Double)、short类型(Short)、byte类型(Byte)、long类型(Long)
一:数据类型 转化 字节
//例:
8143(0000 0000 0000 0000 0001 1111 1100 1111)=>byte[] b=[-49,31,0,0];
//第一个(低端)字节:
8143>>0*8 & 0xff=(1100111)=207(或有符号-49);
//第二个(低端)字节:
8143>>1*8 & 0xff=(00011111)=31;
//第三个(低端)字节:
8143>>2*8 & 0xff=(00000000)=0;
//第四个(低端)字节:
8143>>3*8 & 0xff=(00000000)=0;
二:低端其实也叫小端法(Little-Endian):
低位字节排放在内存的低地址端即该值得起始地址,高位字节排放在内存的高地址端.
三:高端其实也叫大端法(Big-Endian):
高位字节排放在内存的低地址端即该值得起始地址,低位字节排放在内存的高地址端.
例:32bit宽的数 0x12 34 56 78
在Little-endian模式CPU内存中存放方式(假设从地址0x4000开始存放)为:
内存地址 | 存放内容 |
---|---|
0x40000 | 0x78 |
0x40001 | 0x56 |
0x40002 | 0x34 |
0x40003 | 0x12 |
而在Big-endian模式中CPU内存中存放方式则为:
内存地址 | 存放内容 |
---|---|
0x40000 | 0x12 |
0x40001 | 0x34 |
0x40002 | 0x56 |
0x40003 | 0x78 |
四:字符串与字节间的相互转换
字符串->字节数组:
String s;
byte[] bs=s.getBytes();
字节数组->字符串:
byte[] bs=new byte[int];
String s=new String(bs);
//或
String s=new String(bs,encode);
//encode指编码方式 "gb2312,utf-8"
具体分析:
int转换为byte[]:
public static byte[] intToByte(int id){
byte[] arr=new byte[4];
arr[0]=(byte)((int)(id >> 0*8) & 0xff);
arr[1]=(byte)((int)(id >> 1*8) & 0xff);
arr[2]=(byte)((int)(id >> 2*8) & 0xff);
arr[3]=(byte)((int)(id >> 3*8) & 0xff);
return arr;
/*或
for(int i=0;i<arr.length;i++){
arr[i]=(byte)((int)(id >>i*8) & 0xff);
}
return arr;
*/
}
byte[]转换为int:
public static int byteToInt(byte[] arr){
int rs0=(int)((arr[0] & 0xff) << 0*8);
int rs1=(int)((arr[0] & 0xff) << 1*8);
int rs2=(int)((arr[0] & 0xff) << 2*8);
int rs3=(int)((arr[0] & 0xff) << 3*8);
return rs0+rs1+rs2+rs3;
/*或
int result=0;
for(int i=0;i<arr.length;i++){
result+=(int)((arr[i] & 0xff) << i*8);
}
return result;
*/
}
long转换为byte[]:
public static byte[] longToByte(int id){
byte[] arr=new byte[8];
for(int i=0;i<arr.length;i++){
arr[i]=(byte)((int)(id >>i*8) & 0xff);
}
return arr;
}
byte[]转换为long:
public static int byteToLong(byte[] arr){
int result=0;
for(int i=0;i<arr.length;i++){
result+=(long)((arr[i] & 0xff) << i*8);
}
return result;
}
字符串转换为字节:
public static byte[] stringToByte(String str){
//把字符串转换成一个字节数组
byte[] arr=str.getBytes();
return arr;
}
字节转换为字符串:
public static String byteToString(byte[] arr){
String des=new String(arr);
return des;
}