Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 650|回复: 0

Java字节顺序转换

[复制链接]

该用户从未签到

发表于 2011-9-19 15:55:47 | 显示全部楼层 |阅读模式
/**  
* 通信格式转换  
*  
* java 和一些windows编程语言如c、c++、delphi所写的网络程序进行通讯时,需要进行相应的转换  
* 高、低字节之间的转换  
* windows的字节序为低字节开头  
* linux,unix的字节序为高字节开头  
* java则无论平台变化,都是高字节开头  
   */   
   
   
public   class  FormatTransfer {  
/**  
   * 将 int转为低字节在前,高字节在后的byte数组  
   * @param n int  
   * @return byte[]  
   */   
public   static   byte [] toLH( int  n) {  
   byte [] b =  new   byte [ 4 ];  
   b[0 ] = ( byte ) (n &  0xff );  
   b[1 ] = ( byte ) (n >>  8  &  0xff );  
   b[2 ] = ( byte ) (n >>  16  &  0xff );  
   b[3 ] = ( byte ) (n >>  24  &  0xff );  
   return  b;  
}   
   
   
/**  
   * 将 int转为高字节在前,低字节在后的byte数组  
   * @param n int  
   * @return byte[]  
   */   
public   static   byte [] toHH( int  n) {  
   byte [] b =  new   byte [ 4 ];  
   b[3 ] = ( byte ) (n &  0xff );  
   b[2 ] = ( byte ) (n >>  8  &  0xff );  
   b[1 ] = ( byte ) (n >>  16  &  0xff );  
   b[0 ] = ( byte ) (n >>  24  &  0xff );  
   return  b;  
}   
   
/**  
   * 将 short转为低字节在前,高字节在后的byte数组  
   * @param n short  
   * @return byte[]  
   */   
public   static   byte [] toLH( short  n) {  
   byte [] b =  new   byte [ 2 ];  
   b[0 ] = ( byte ) (n &  0xff );  
   b[1 ] = ( byte ) (n >>  8  &  0xff );  
   return  b;  
}

   
/**  
   * 将 short转为高字节在前,低字节在后的byte数组  
   * @param n short  
   * @return byte[]  
   */   
public   static   byte [] toHH( short  n) {  
   byte [] b =  new   byte [ 2 ];  
   b[1 ] = ( byte ) (n &  0xff );  
   b[0 ] = ( byte ) (n >>  8  &  0xff );  
   return  b;  
}   
   
   
   
/**  
   * 将将int转为高字节在前,低字节在后的byte数组   
public static byte[] toHH(int number) {  
   int temp = number;  
   byte[] b = new byte[4];  
   for (int i = b.length - 1; i > -1; i--) {  
     b = new Integer(temp & 0xff).byteValue();  
     temp = temp >> 8;  
   }  
   return b;  
}   
public static byte[] IntToByteArray(int i) {  
     byte[] abyte0 = new byte[4];  
     abyte0[3] = (byte) (0xff & i);  
     abyte0[2] = (byte) ((0xff00 & i) >> 8);  
     abyte0[1] = (byte) ((0xff0000 & i) >> 16);  
     abyte0[0] = (byte) ((0xff000000 & i) >> 24);  
     return abyte0;  
}   
*/   
   
/**  
   * 将 float转为低字节在前,高字节在后的byte数组  
   */   
public   static   byte [] toLH( float  f) {  
   return  toLH(Float.floatToRawIntBits(f));  
}   
/**  
   * 将 float转为高字节在前,低字节在后的byte数组  
   */   
public   static   byte [] toHH( float  f) {  
   return  toHH(Float.floatToRawIntBits(f));  
}

   
/**  
   * 将 String转为byte数组  
   */   
public   static   byte [] stringToBytes(String s,  int  length) {  
   while  (s.getBytes().length < length) {  
     s += " " ;  
   }  
   return  s.getBytes();  
}   
   
   
/**  
   * 将字节数组转换为String  
   * @param b byte[]  
   * @return String  
   */   
public   static  String bytesToString( byte [] b) {  
   StringBuffer result = new  StringBuffer( "" );  
   int  length = b.length;  
   for  ( int  i= 0 ; i< length; i++) {  
     result.append((char )(b &  0xff ));  
   }  
   return  result.toString();  
}

   
/**  
   * 将字符串转换为byte数组  
   * @param s String  
   * @return byte[]  
   */   
public   static   byte [] stringToBytes(String s) {  
   return  s.getBytes();  
}

   
/**  
   * 将高字节数组转换为int  
   * @param b byte[]  
   * @return int  
   */   
public   static   int  hBytesToInt( byte [] b) {  
   int  s =  0 ;  
   for  ( int  i =  0 ; i <  3 ; i++) {  
     if  (b >=  0 ) {  
     s = s + b;  
     } else  {  
     s = s + 256  + b;  
     }  
     s = s * 256 ;  
   }  
   if  (b[ 3 ] >=  0 ) {  
     s = s + b[3 ];  
   } else  {  
     s = s + 256  + b[ 3 ];  
   }  
   return  s;  
}

   
/**  
   * 将低字节数组转换为int  
   * @param b byte[]  
   * @return int  
   */   
public   static   int  lBytesToInt( byte [] b) {  
   int  s =  0 ;  
   for  ( int  i =  0 ; i <  3 ; i++) {  
     if  (b[ 3 -i] >=  0 ) {  
     s = s + b[3 -i];  
     } else  {  
     s = s + 256  + b[ 3 -i];  
     }  
     s = s * 256 ;  
   }  
   if  (b[ 0 ] >=  0 ) {  
     s = s + b[0 ];  
   } else  {  
     s = s + 256  + b[ 0 ];  
   }  
   return  s;  
}   
   
   
/**  
   * 高字节数组到short的转换  
   * @param b byte[]  
   * @return short  
   */   
public   static   short  hBytesToShort( byte [] b) {  
   int  s =  0 ;  
   if  (b[ 0 ] >=  0 ) {  
     s = s + b[0 ];  
     } else  {  
     s = s + 256  + b[ 0 ];  
     }  
     s = s * 256 ;  
   if  (b[ 1 ] >=  0 ) {  
     s = s + b[1 ];  
   } else  {  
     s = s + 256  + b[ 1 ];  
   }  
   short  result = ( short )s;  
   return  result;  
}

   
/**  
   * 低字节数组到short的转换  
   * @param b byte[]  
   * @return short  
   */   
public   static   short  lBytesToShort( byte [] b) {  
   int  s =  0 ;  
   if  (b[ 1 ] >=  0 ) {  
     s = s + b[1 ];  
     } else  {  
     s = s + 256  + b[ 1 ];  
     }  
     s = s * 256 ;  
   if  (b[ 0 ] >=  0 ) {  
     s = s + b[0 ];  
   } else  {  
     s = s + 256  + b[ 0 ];  
   }  
   short  result = ( short )s;  
   return  result;  
}

   
/**  
   * 高字节数组转换为float  
   * @param b byte[]  
   * @return float  
   */   
public   static   float  hBytesToFloat( byte [] b) {  
   int  i =  0 ;  
   Float F = new  Float( 0.0 );  
   i = ((((b[0 ]& 0xff )<< 8  | (b[ 1 ]& 0xff ))<< 8 ) | (b[ 2 ]& 0xff ))<< 8  | (b[ 3 ]& 0xff );  
   return  F.intBitsToFloat(i);  
}

   
/**  
   * 低字节数组转换为float  
   * @param b byte[]  
   * @return float  
   */   
public   static   float  lBytesToFloat( byte [] b) {  
   int  i =  0 ;  
   Float F = new  Float( 0.0 );  
   i = ((((b[3 ]& 0xff )<< 8  | (b[ 2 ]& 0xff ))<< 8 ) | (b[ 1 ]& 0xff ))<< 8  | (b[ 0 ]& 0xff );  
   return  F.intBitsToFloat(i);  
}

   
/**  
   * 将 byte数组中的元素倒序排列  
   */   
public   static   byte [] bytesReverseOrder( byte [] b) {  
   int  length = b.length;  
   byte [] result =  new   byte [length];  
   for ( int  i= 0 ; i< length; i++) {  
     result[length-i-1 ] = b;  
   }  
   return  result;  
}

   
/**  
   * 打印byte数组  
   */   
public   static   void  printBytes( byte [] bb) {  
   int  length = bb.length;  
   for  ( int  i= 0 ; i< length; i++) {  
     System.out.print(bb + " " );  
   }  
   System.out.println("" );  
}   
   
public   static   void  logBytes( byte [] bb) {  
   int  length = bb.length;  
   String out = "" ;  
   for  ( int  i= 0 ; i< length; i++) {  
     out = out + bb + " " ;  
   }   
   
}   
   
/**  
   * 将 int类型的值转换为字节序颠倒过来对应的int值  
   * @param i int  
   * @return int  
   */   
public   static   int  reverseInt( int  i) {  
   int  result = FormatTransfer.hBytesToInt(FormatTransfer.toLH(i));  
   return  result;  
}   
   
/**  
   * 将 short类型的值转换为字节序颠倒过来对应的short值  
   * @param s short  
   * @return short  
   */   
public   static   short  reverseShort( short  s) {  
   short  result = FormatTransfer.hBytesToShort(FormatTransfer.toLH(s));  
   return  result;  
}   
   
/**  
   * 将 float类型的值转换为字节序颠倒过来对应的float值  
   * @param f float  
   * @return float  
   */   
public   static   float  reverseFloat( float  f) {  
   float  result = FormatTransfer.hBytesToFloat(FormatTransfer.toLH(f));  
   return  result;  
}   
   
}  
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2024-6-26 16:32 , Processed in 0.437838 second(s), 46 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表