`
rdman
  • 浏览: 84700 次
  • 性别: Icon_minigender_1
  • 来自: 陕西
社区版块
存档分类
最新评论

java网络字节序转换2

阅读更多

/** 
* 通信格式转换 

* 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[i] &  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[i] >=  0 ) { 
     s = s + b[i]; 
     } else  { 
     s = s + 256  + b[i]; 
     } 
     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[i]; 
   } 
   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; 
}  
  

分享到:
评论
1 楼 我叫小伤 2015-04-29  
你好,在字节序这块有点疑问,能否QQ指点我一下?我QQ10297024

相关推荐

    JAVA网络字节序转换1

    Java 网络字节序转换是编程过程中一个重要的概念,尤其在跨平台通信和处理二进制数据时。字节序是指多字节数据(如整数或浮点数)在内存或文件中存储的顺序。主要有两种字节序:Big-Endian(大端字节序)和 Little-...

    Java字节码转换工具—Retrotranslator

    Java字节码转换工具Retrotranslator是一个用于解决软件兼容性问题的实用工具,尤其是在Java版本升级带来的不兼容性上。随着Java技术的不断迭代,新版本的特性常常不能在旧版本的JDK环境下运行,而Retrotranslator的...

    java-16进制4字节转Float

    Java中的默认字节序是网络字节序,也就是大端字节序。 2. **解析过程**:将16进制字符串转换为浮点数,通常涉及以下步骤: - 将16进制字符串转换为字节数组,每个字节对应一个16进制字符。 - 根据字节序调整字节...

    Java实现字节流与图片的转化

    本教程将详细讲解如何使用Java实现字节流来转换和处理图片。 首先,我们需要理解字节流的概念。在Java中,字节流分为两种类型:输入字节流(InputStream)和输出字节流(OutputStream)。它们分别用于读取和写入...

    字节序转换辅助类,字节大端小端转换

    字节序转换辅助类,short大小端转换,ushort大小端转换,int大小端转换,uint大小端转换,long大小端转换,ulong大小端转换; short类型 小端转大端,short类型 大端转小端,int类型 小端转大端,int类型 大端转小端...

    JAVA二进制字节数组字符十六进制BCD编码转换.doc

    - `bytesToHexString()`方法遍历字节数组,将每个字节转换为十六进制字符串,并确保结果始终为两位。 3. **BCD编码** - BCD编码是一种特殊形式的二进制编码,用于表示十进制数。每个十进制数字用四位二进制表示,...

    c++,java,php,c# 的网络字节流读写文件

    对于字节序转换,Java提供了`java.nio.ByteOrder`类,可以方便地在大端和小端之间切换。 PHP是另一种常用的Web开发语言,其文件操作主要通过`fopen`、`fwrite`和`fread`等函数完成。在网络字节流方面,PHP提供了`...

    Java将字节转换为十六进制代码分享

    在Java编程语言中,将字节转换为十六进制是一个常见的任务,特别是在处理二进制数据、加密解密、网络通信等领域。一个字节(byte)由8位(bit)组成,而十六进制(Hexadecimal)是一种用16个符号(0-9和A-F)来表示...

    Java字节数组与常见类型转换工具

    Java字节数组与常见类型转换工具,包括byte[] 与int long double float string boolean 等类型的相互转换。

    进制转换-编码的设计原理-位运算-内存与内存地址-字节序-java解码编码字节流

    二进制杂谈 1、十进制、二进制、十六进制 2、计算机储存单位 3、进制转换 4、有符号编码 5、反码的设计原理 6、二进制的位运算 7、位操作符 8、内存与内存地址 9、字节序 10、Java解码 11、Java编码

    java实现的字节数组转换成基本类型,基本类型转换成byte[]

    char short int long float double 转换成byte数组

    Java实现字节流与图片的转化Java源码

    本教程将详细讲解如何使用Java实现字节流与图片之间的转换,这对于在网络上传输或者存储图片等二进制数据至关重要。 首先,我们需要了解Java中的字节流。Java提供了两种类型的字节流:输入流(InputStream)和输出...

    Java实现的进制转换工具类完整示例

    2. 将字符串转换为十六进制字符数组:`public static char[] encodeHex(String str, Charset charset)` 该方法将字符串转换为十六进制字符数组。该方法可以将字符串转换为小写或大写的十六进制字符数组,可以根据...

    JAVA作业三字节数组转化.docx

    在Java编程语言中,字节数组(byte array)和基本数据类型如int之间的转换是常见的操作,特别是在处理网络通信、文件存储或者序列化时。本篇内容将详细讲解如何在Java中进行这两种类型的转化。 首先,我们来看如何...

    smali2java——直接将smali转换成java

    标题"smali2java——直接将smali转换成java"揭示了本文的核心主题,即一个名为"smali2java"的工具,它的主要功能是将编程语言Smali转换为Java。Smali是一种低级的、汇编式的语言,通常用于Android应用的逆向工程,而...

    高低字节转换工具

    用于TXT文本文档存储的16进制文件的高低字节的转换以及数据校验

    Java整型数与网络字节序byte[]数组转换关系详解

    "Java整型数与网络字节序byte[]数组转换关系详解" 本文主要介绍了Java整型数与网络字节序byte[]数组之间的转换关系,包括整型数到byte[]数组的转换和byte[]数组到整型数的转换。这些转换关系在Java和C/C++之间的...

    tucaoxingren#ProgramingNote#Java字节字符转换流1

    title: Java字节字符转换流Java字节字符转换流转换流的用法//字节流InputStream in = System.in;//写入文件中//换行//

    java字节单位换算公用类

    java中字节的各级单位相互转换的公用方法的公用类

    java实现视频转换器

    java实现视频转换器,很大很强大的视频转换器。奉献给大家

Global site tag (gtag.js) - Google Analytics