`
wxb_love
  • 浏览: 95943 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

【转】Java字节序转换

阅读更多
/** 
    * 通信格式转换 
    * 
    * 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) >>
        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;  
    }   
      
    }  


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/dyufei/archive/2010/09/27/5910020.aspx
分享到:
评论

相关推荐

    Java字节码转换工具—Retrotranslator

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

    JAVA网络字节序转换1

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

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

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

    java-16进制4字节转Float

    在Java编程语言中,将16进制的4字节数据转换为浮点数是常见的数据处理操作,尤其是在与硬件设备交互或者进行低级通信时。这个过程涉及到字节顺序的理解,以及Java中的数据类型转换。以下是关于这个主题的详细解释。 ...

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

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

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

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

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

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

    RSA加密JAVA转C# JAVA转PHP,C#转JAVA

    本工具提供了在不同编程语言间进行RSA密钥的互换,包括JAVA转C#、JAVA转PHP以及C#转JAVA的转换功能。 在JAVA中,RSA的实现主要依赖于`java.security`包,其中`KeyPairGenerator`用于生成公钥和私钥,`Cipher`用于...

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

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

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

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

    smali2java——直接将smali转换成java

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

    java计算机硬盘大小转换(B,KB,MB,GB,TB,PB之间的大小转换)

    java计算机硬盘大小转换(B,KB,MB,GB,TB,PB之间的大小转换) java 硬盘大小转换 数据转换 内存转换 存储大小转换

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

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

    java字节转换类和反转成String

    java字节转换类和反转成String,可以转换String字符为byte类型进行加密

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

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

    JAVA类库转换成C#类库工具

    这个工具将Java字节码转换为.NET Framework的IL(中间语言),从而实现了Java与.NET之间的互操作性。 1. **IKVM的工作原理**: - IKVM首先通过一个JVM(Java虚拟机)实现,将Java字节码转换为.NET可理解的IL代码。...

    CLASS转JAVA

    这个工具专门用于将Java字节码(.class文件)转换回可读的源代码格式(.java文件),帮助开发者分析或调试已部署的程序。 1. **Java编译过程**: Java源代码(.java文件)首先通过Java编译器(javac)被编译成Java...

    java字节单位换算公用类

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

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

    Java实现的进制转换工具类完整示例 Java实现的进制转换工具类是Java语言中的一种常用工具类,用于实现各种进制之间的转换操作,如二进制、十六进制、字符串、数组等。该工具类主要提供了将字节数组转换为十六进制...

    c转java工具合集

    这段时间本人能找的c或c#转java的工具都在这里。自己留个备份。下面是文件名:C++ to Java Converter、C2J、cnet2_C2J_exe、CPP-to-Java-Converter_Source、CSharp+to+Java+Converter、java转c工具Java2Cpp。没有去...

Global site tag (gtag.js) - Google Analytics