package java中的数据类型;//整形转化成字节型public class Int_to_Byte {//int转化为字节数组 public static byte change(int b){ byte[] arr=new byte[4]; arr[0]=(byte)((b>>0*8)); return arr[0]; } public static byte[] change2(int a){ byte[] arr1=new byte[4]; for(int i=0;i<arr1.length;i++){ arr1[i]=(byte)((a>>i*8)); } return arr1; } //byte型转化成int型 public static int[] cheng3(byte[]arr){ int arr2[]=new int[4]; for(int i=0;i<arr.length;i++){ arr2[i]=(int)(arr[i]<<i*8); } return arr2; } //输出 public static void main(String arges[]){ byte arr=Int_to_Byte.change(8143); System.out.println(arr); byte arr1[]=Int_to_Byte.change2(8143); System.out.println(arr1[0]+" "+arr1[1]+" "+arr1[2]+" "+arr1[3]); int arr2[]=Int_to_Byte.cheng3(arr1); System.out.println(arr2[0]+arr2[1]+arr2[2]+arr2[3]); }}
1 回答
按照自己的节奏前行
TA贡献90条经验 获得超70个赞
//闲的无聊,帮你看看你哪里错了,我给你做了注释 public class Int_to_Byte { //int转化为字节数组 public static byte change(int b){ //这个玩意写的乱七八糟,没用 byte[] arr=new byte[4]; arr[0]=(byte)((b>>0*8)); //这里你相当于没有移位,把一个int类型进行强转,结果失真,默认保留最后8位, //但是,小朋友,byte是一个8位的,且带符号,这个你得到出来的范围肯定在-127到128之间 return arr[0]; //没用,因为并不是你写个4位的数字,每个数字都占一个字节,想想吧,孩子,前面要补0的 } public static byte[] change2(int a){ byte[] arr1=new byte[4]; for(int i=0;i<arr1.length;i++){ arr1[i]=(byte)((a>>i*8)); //向右移动一位相当于除以2.嗯,你可以想想,你在干啥,依次除以2的8次方的 //8的次方的..,没错,你是移动了1个字节,但是不代表你数字也移动了一位 //还有,转化失真 } return arr1; } //byte型转化成int型 public static int[] cheng3(byte[]arr){ //你以为这是字符串吗?拼一拼就出来了...哈哈哈哈,进制转化多看看 int arr2[]=new int[4]; for(int i=0;i<arr.length;i++){ arr2[i]=(int)(arr[i]<<i*8); } return arr2; } //输出 public static void main(String arges[]){ //这里就没啥说的了,你理解的误区是一个字节代表数字的某个位, //嗯,这样说吧,你想每次移动一个字节,那就需要2的八次方进制来做, //这还只是无符号的,这样的话,你得到的哪一位就是当前位数的数字, //十进制吗,你移动一个字节是想发泄自己的不满吗? byte arr=Int_to_Byte.change(8143); System.out.println(arr); byte arr1[]=Int_to_Byte.change2(8143); System.out.println(arr1[0]+" "+arr1[1]+" "+arr1[2]+" "+arr1[3]); int arr2[]=Int_to_Byte.cheng3(arr1); System.out.println(arr2[0]+arr2[1]+arr2[2]+arr2[3]); } }
添加回答
举报
0/150
提交
取消