本篇博文旨在将数据转化做成工具,以供我们在使用时的便利(应用场景举例:多文件传输时的数据转化,服务器客户端之间的数据转化),其中包含的byte与其他几种基本类型之间的转化,可能遇到的问题在代码中以注释的形式加以叙述。

public class BitToAll {
		private static final String Tensix = "0123456789ABCDEF";	

		public BitToAll() {
		
		}
		
		public static String Bytetostring(byte by) {
			return "" + Tensix.charAt((by >> 4) & 0x0F) 
			+ Tensix.charAt(by & 0x0F);
			//byte是8位的,将前四位转化成第一个字符,将后四位转化成第二个字符,然后拼接
		}
		
		public static String Bytestostring(byte[] value) {//一个byte元素是一个字节
			if(value == null) {
				return null;
			}
			StringBuffer sber = new StringBuffer("");
			for(byte values :value) {
				 sber.append(Bytetostring(values));//数组每个元素对应2个字符,所以输出的16进制字符串长度是value数组的两倍
			}
			
			return sber.toString();
			
		}
		
		public static Byte Stringtobyte(String para) {
			if(para==null||para.length()!=2) {//两个字符转化成一个byte元素
				return null;
			}
			
			byte result = 0;
			result += (byte)(Tensix.indexOf(para.substring(0,1))<<4);//取第一个元素左移4位得到高四位
			result += (byte)((Tensix.indexOf(para.substring(1, 2)))&0x0f);//取第二个元素和0x0f相与得到低四位
			
			return result;
		}
		
		public static Byte[] Stringtobytes(String str) {
			if(str == null||str.length()%2 != 0) {//两个字符转化成一个byte元素,所以必定是偶数长度
				return null;
			}
			Byte[] res = new Byte[str.length()/2];//数组每个元素对应2个字符,所以value数组的长度是字符串长度的一半
			for(int i = 0 ; i < str.length()/2;i++) {
				res[i] = Stringtobyte(str.substring(2*i,2*i+2));//两个两个进行处理
			}
			
			return res;
			
		}
		
		
		
		public static int bytetoint(byte[] paras) {
			int res = 0;
			
			int temp = 0xFF;
			for(int i = 0;i < 4;i++) {
				res |= ((paras[3-i] << (i*8)) & temp);//每次把数字左移8位在和对应的0xff移动后的值相与(低八位是数组的最后)
				temp <<= 8;
			}
			//详述  :i=  0;得到数组第4个元素是一个Byte类型的8位数据,将他和0xff与得到低八位
			//     i = 1;得到数组第3个元素是一个Byte类型的8位数据,左移8位,将他和0xff00相与得到次八位
			//     i = 2;得到数组第2个元素是一个Byte类型的8位数据,左移16位,将他和0xff0000相与得到中八位
			//     i = 3;得到数组第1个元素是一个Byte类型的8位数据,左移24位,将他和0xff000000相与得到高八位
			//   把每次得到的数据拼接起来就是32位的int类型数据
			return res;
			
		}

                public static byte[] inttobyte(int para) {
			int len = 4;//int 为四字节
			byte[] res = new byte[len];
			
			for(int i = 0; i < len ; i++) {
				res[len-i-1] = (byte)((para >> i*8) & 0xFF);
				//int 是32位的
				// 先将低8位的数据取出来,& 0xFF得到数组的第4个元素
				// para右移8位得到次8位,& 0xFF得到数组的第3个元素。。
			}
			
			return res;
		}
		
		public static byte[] Longtobyte(long para) {
			int len = 8;//int 为四字节
			byte[] res = new byte[len];
			
			for(int i = 0; i < len ; i++) {
				res[len-1-i] = (byte)((para >> i*8) & 0xFF);//从低到高以此得到每八位数据
			}
			
			return res;
		}
		
		public static long bytetolong(byte[] paras) {
			long res = 0;
			
			long temp = 0xFF;
			for(int i = 0;i < 8;i++) {
				res |= ((paras[7-i] << (i*8)) & temp);//每次把数字左移8位在和对应的0xff移动后的值相与(低八位是数组的最后)
				temp <<= 8;
			}
			//例子:i= 0 ;得到数组第一个元素是一个Byte类型的8位数据,将他和0ff与得到低八位
			//     i = 1;得到数组第二个元素是一个Byte类型的8位数据  左移8位,将他和0xff00得到次八位
			//     i = 2;得到数组第三个元素是一个Byte类型的8位数据   左移16位,将他和0xff0000得到中八位
			//    	i = 3;得到数组第四个元素是一个Byte类型的8位数据   左移24位,将他和0xff000000得到高八位
			// ..... i = 7
			//   把每次得到的数据拼接起来就是64位的long类型数据
			return res;
			
		}
		
}

测试结果:

java byte 转十六进制 java byte转long_i++