byte与基本类型的转换

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

2013-08-108个评论作者:在路上001收藏我要投稿在Java的网络编程中传输的经常是byte数组,但我们实际中使用的数据类型可能是任一种数据类型,这就需要在它们之间相互转换,转换的核心在于将其他类型的数据的每一位转换成byte类型的数据。下面给出相关的转换代码1.short与byte数组的互转[java]/***转换short为byte**@paramb*@params需要转换的short*@paramindex*/publicstaticvoidputShort(byteb[],shorts,intindex){b[index+1]=(byte)(s8);b[index+0]=(byte)(s0);}/***通过byte数组取到short**@paramb*@paramindex第几位开始取*@return*/publicstaticshortgetShort(byte[]b,intindex){return(short)(((b[index+1]8)|b[index+0]&0xff));}/***转换short为byte**@paramb*@params需要转换的short*@paramindex*/publicstaticvoidputShort(byteb[],shorts,intindex){b[index+1]=(byte)(s8);b[index+0]=(byte)(s0);}/***通过byte数组取到short**@paramb*@paramindex第几位开始取*@return*/publicstaticshortgetShort(byte[]b,intindex){return(short)(((b[index+1]8)|b[index+0]&0xff));}2.int与byte数组的互转[java]/***将32位的int值放到4字节的byte数组*@paramnum*@return*/publicstaticbyte[]intToByteArray(intnum){byte[]result=newbyte[4];result[0]=(byte)(num24);//取最高8位放到0下标result[1]=(byte)(num16);//取次高8为放到1下标result[2]=(byte)(num8);//取次低8位放到2下标result[3]=(byte)(num);//取最低8位放到3下标returnresult;}/***将4字节的byte数组转成一个int值*@paramb*@return*/publicstaticintbyteArrayToInt(byte[]b){byte[]a=newbyte[4];inti=a.length-1,j=b.length-1;for(;i=0;i--,j--){//从b的尾部(即int值的低位)开始copy数据if(j=0)a[i]=b[j];elsea[i]=0;//如果b.length不足4,则将高位补0}intv0=(a[0]&0xff)24;//&0xff将byte值无差异转成int,避免Java自动类型提升后,会保留高位的符号位intv1=(a[1]&0xff)16;intv2=(a[2]&0xff)8;intv3=(a[3]&0xff);returnv0+v1+v2+v3;}/***将32位的int值放到4字节的byte数组*@paramnum*@return*/publicstaticbyte[]intToByteArray(intnum){byte[]result=newbyte[4];result[0]=(byte)(num24);//取最高8位放到0下标result[1]=(byte)(num16);//取次高8为放到1下标result[2]=(byte)(num8);//取次低8位放到2下标result[3]=(byte)(num);//取最低8位放到3下标returnresult;}/***将4字节的byte数组转成一个int值*@paramb*@return*/publicstaticintbyteArrayToInt(byte[]b){byte[]a=newbyte[4];inti=a.length-1,j=b.length-1;for(;i=0;i--,j--){//从b的尾部(即int值的低位)开始copy数据if(j=0)a[i]=b[j];elsea[i]=0;//如果b.length不足4,则将高位补0}intv0=(a[0]&0xff)24;//&0xff将byte值无差异转成int,避免Java自动类型提升后,会保留高位的符号位intv1=(a[1]&0xff)16;intv2=(a[2]&0xff)8;intv3=(a[3]&0xff);returnv0+v1+v2+v3;}3.long与byte数组的互转[java]/***将64位的long值放到8字节的byte数组*@paramnum*@return返回转换后的byte数组*/publicstaticbyte[]longToByteArray(longnum){byte[]result=newbyte[8];result[0]=(byte)(num56);//取最高8位放到0下标result[1]=(byte)(num48);//取最高8位放到0下标result[2]=(byte)(num40);//取最高8位放到0下标result[3]=(byte)(num32);//取最高8位放到0下标result[4]=(byte)(num24);//取最高8位放到0下标result[5]=(byte)(num16);//取次高8为放到1下标result[6]=(byte)(num8);//取次低8位放到2下标result[7]=(byte)(num);//取最低8位放到3下标returnresult;}/***将8字节的byte数组转成一个long值*@parambyteArray*@return转换后的long型数值*/publicstaticlongbyteArrayToInt(byte[]byteArray){byte[]a=newbyte[8];inti=a.length-1,j=byteArray.length-1;for(;i=0;i--,j--){//从b的尾部(即int值的低位)开始copy数据if(j=0)a[i]=byteArray[j];elsea[i]=0;//如果b.length不足4,则将高位补0}//注意此处和byte数组转换成int的区别在于,下面的转换中要将先将数组中的元素转换成long型再做移位操作,//若直接做位移操作将得不到正确结果,因为Java默认操作数字时,若不加声明会将数字作为int型来对待,此处必须注意。longv0=(long)(a[0]&0xff)56;//&0xff将byte值无差异转成int,避免Java自动类型提升后,会保留高位的符号位longv1=(long)(a[1]&0xff)48;longv2=(long)(a[2]&0xff)40;longv3=(long)(a[3]&0xff)32;longv4=(long)(a[4]&0xff)24;longv5=(long)(a[5]&0xff)16;longv6=(long)(a[6]&0xff)8;longv7=(long)(a[7]&0xff);returnv0+v1+v2+v3+v4+v5+v6+v7;}/***将64位的long值放到8字节的byte数组*@paramnum*@return返回转换后的byte数组*/publicstaticbyte[]longToByteArray(longnum){byte[]result=newbyte[8];result[0]=(byte)(num56);//取最高8位放到0下标result[1]=(byte)(num48);//取最高8位放到0下标result[2]=(byte)(num40);//取最高8位放到0下标result[3]=(byte)(num32);//取最高8位放到0下标result[4]=(byte)(num24);//取最高8位放到0下标result[5]=(byte)(num16);//取次高8为放到1下标result[6]=(byte)(num8);//取次低8位放到2下标result[7]=(byte)(num);//取最低8位放到3下标returnresult;}/***将8字节的byte数组转成一个long值*@parambyteArray*@return转换后的long型数值*/publicstaticlongbyteArrayToInt(byte[]byteArray){byte[]a=newbyte[8];inti=a.length-1,j=byteArray.length-1;for(;i=0;i--,j--){//从b的尾部(即int值的低位)开始copy数据if(j=0)a[i]=byteArray[j];elsea[i]=0;//如果b.length不足4,则将高位补0}//注意此处和byte数组转换成int的区别在于,下面的转换中要将先将数组中的元素转换成long型再做移位操作,//若直接做位移操作将得不到正确结果,因为Java默认操作数字时,若不加声明会将数字作为int型来对待,此处必须注意。longv0=(long)(a[0]&0xff)56;//&0xff将byte值无差异转成int,避免Java自动类型提升后,会保留高位的符号位longv1=(long)(a[1]&0xff)48;longv2=(long)(a[2]&0xff)40;longv3=(long)(a[3]&0xff)32;longv4=(long)(a[4]&0xff)24;longv5=(long)(a[5]&0xff)16;longv6=(long)(a[6]&0xff)8;longv7=(long)(a[7]&0xff);returnv0+v1+v2+v3+v4+v5+v6+v7;}4.float与byte数组的互转[java]/***float转换byte**@parambb*@paramx*@paramindex*/publicstaticvoidputFloat(byte[]bb,floatx,intindex){//byte[]b=newbyte[4];intl=Float.floatToIntBits(x);for(inti=0;i4;i++){bb[index+i]=newInteger(l).byteValue();l=l8;}}/***通过byte数组取得float**@parambb*@paramindex*@return*/publicstaticfloatgetFloat(byte[]b,intindex){intl;l=b[index+0];l&=0xff;l|=((long)b[index+1]8);l&=0xffff;l|=((long)b[index+2]16);l&=0xffffff;l|=((long)b[index+3]24);returnFloat.intBitsToFloat(l);}/***float转换byte**@parambb*@paramx*@paramindex*/publicstaticvoidputFloat(byte[]bb,floatx,intindex){//byte[]b=newbyte[4];intl=Float.floatToIntBits(

1 / 8
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功