package com;
public class Test3 {
public static void main(String[] args){
//擅长解析流
//转为编码
String str="大家好,你们很棒,你们最好了!";
byte[] arr4=new byte[str.length()*4];//申请一个byte数组,char转成int类型是4倍byte;
for(int i=0;i<str.length();i++)
{
char x=str.charAt(i);
int w=x;
System.out.print(w+",");
arr4[i*4]=f4(w);
arr4[i*4+1]=f3(w);
arr4[i*4+2]=f2(w);
arr4[i*4+3]=f1(w);
System.out.println(arr4[i*4]+","+arr4[i*4+1]+","+arr4[i*4+2]+","+arr4[i*4+3]+",");
}
System.out.println("");
//编码转为符号
String m="";
for(int i=0;i<arr4.length;i+=4) {
int w=f5(new byte[]{arr4[i],arr4[i+1],arr4[i+2],arr4[i+3]});
char x=(char)w;
m+=x;
}
System.out.println("解析流之后得到"+m);
}
//分割int类型的方法,每次右移八位取低八位;01010101 10010100 10100101 00100101 可以用byte类型接收获得最低八位,有符号位干扰!有负数!
public static byte f1(int x){
return (byte)x;
}
public static byte f2(int x){
x=x>>8;
return (byte)x;
}
public static byte f3(int x){
x=x>>16;
return (byte)x;
}
public static byte f4(int x){
x=x>>24;
return (byte)x;
}
public static int f5(byte[] arr4) {
int x=0;
// 00010101 10101001 01010101 11010101
if(arr4[0]>=0) {
x+=arr4[0]<<24;
}
else {
x+=(arr4[0]&255)<<24;
}
if(arr4[1]>=0) {
x+=arr4[1]<<16;
}
else {
x+=(arr4[1]&255)<<16;
}
if(arr4[2]>=0) {
x+=arr4[2]<<8;
}
else {
x+=(arr4[2]&255)<<8;
}
if(arr4[3]>=0) {
x+=arr4[3];
}
else {
x+=(arr4[3]&255); //11111111
}
return 0;
}
}
这块涉及到原码反码补码 无符号位移和有符号位移