java byte 与 binary 转换

  1. 在写通讯程序时,有时需要解析二进制数据流,可能会遇到java数值类型与二进制byte数组的类型转换问题。因此,笔者提供下面代码实例,供大家需要时参考。  
  2. import java.io.*;  
    /** 
     * java数值类型与二进制类型相互转换 
     * @author lijun 
     * 
     */  
    public class MyTest {  
    /** 
    * int32转换为二进制(4个字节) 
    * @param i 待转换的整数 
    * @return 返回4字节二进制数 
    */  
    public byte[] int2byte(int i){  
    byte[] res = new byte[4];  
    res[3] = (byte)i;  
    res[2] = (byte)(i>>>8);  
    res[1] = (byte)(i>>>16);  
    res[0] = (byte)(i>>>24);  
    return res;  
    }  
    /** 
    * 4字节二进制数转换为int32的整数 
    * @param bytes 4字节的二进制数 
    * @return int32整数 
    */  
    public int byte2int(byte[] bytes){  
    int res = (((bytes[0]<<24)>>>24)<<24)|(((bytes[1]<<24)>>>24)<<16)|(((bytes[2]<<24)>>>24)<<8)|((bytes[3]<<24)>>>24);  
    return res;  
    }  
    /** 
    * int16整数转换二2字节的二进制数 
    * @param i int16整数 
    * @return 2字节的二进制数 
    */  
    public byte[] int16Tobyte(int i){  
    byte[] res = new byte[2];  
    res[1] = (byte)i;  
    res[0] = (byte)(i>>>8);  
    return res;  
    }  
    /** 
    * 2字节的二进制数转换为int16整数 
    * @param bytes 2字节的二进制数 
    * @return int16整数 
    */  
    public int byteToint16(byte[] bytes){  
    int res = ((bytes[0]<<8)|((bytes[1]<<24)>>>24));  
    return res;  
    }  
    /** 
    * 长整型long转换为8字节的二进制数 
    * @param l 长整型long 
    * @return 8字节的二进制数 
    */  
    public byte[] long2byte(long l){  
    byte[] res = new byte[8];  
    res[7] = (byte)l;  
    res[6] = (byte)(l>>>8);  
    res[5] = (byte)(l>>>16);  
    res[4] = (byte)(l>>>24);  
    res[3] = (byte)(l>>>32);  
    res[2] = (byte)(l>>>40);  
    res[1] = (byte)(l>>>48);  
    res[0] = (byte)(l>>>56);  
    return res;  
    }  
    /** 
    * 8字节的二进制数转换为长整型long 
    * @param bytes 8字节的二进制数 
    * @return 长整型long 
    */  
    public long byte2long(byte[] bytes){  
    long l0 = bytes[0];  
    long l1 = bytes[1];  
    long l2 = bytes[2];  
    long l3 = bytes[3];  
    long l4 = bytes[4];  
    long l5 = bytes[5];  
    long l6 = bytes[6];  
    long l7 = bytes[7];  
    long res = (l0<<56)|(((l1<<56)>>>56)<<48)|(((l2<<56)>>>56)<<40)|(((l3<<56)>>>56)<<32)|(((l4<<56)>>>56)<<24)|(((l5<<56)>>>56)<<16)|(((l6<<56)>>>56)<<8)|((l7<<56)>>>56);  
    return res;  
    }  
    /** 
    * 浮点型float转换为4字节的二进制数 
    * @param f 浮点数float 
    * @return 4字节的二进制数 
    */  
    public byte[] float2byte(float f){  
    byte[] res = new byte[4];  
    int l = Float.floatToIntBits(f);  
    for(int i=3; i>=0; i--){  
    res[i] = new Integer(l).byteValue();  
    l >>= 8;  
    }  
    return res;  
    }  
    /** 
    * 4字节的二进制数转换为浮点数float 
    * @param bytes 4字节的二进制数 
    * @return 浮点数float 
    */  
    public float byte2float(byte[] bytes){  
    int l = byte2int(bytes);  
    float res = Float.intBitsToFloat(l);  
    return res;  
    }  
    /** 
    * 双浮点数转换为8字节的二进制数 
    * @param d 双浮点数double 
    * @return 8字节的二进制数 
    */  
    public byte[] double2byte(double d){  
    long l = Double.doubleToLongBits(d);  
    byte[] res = long2byte(l);  
    return res;  
    }  
    /** 
    * 8字节的二进制数转换为双浮点数 
    * @param bytes 8字节的二进制数 
    * @return 双浮点数double 
    */  
    public double byte2double(byte[] bytes){  
    long l = byte2long(bytes);  
    double res = Double.longBitsToDouble(l);  
    return res;  
    }  
    public void test()throws Exception{  
    FileOutputStream fos = new FileOutputStream("d:/data.dat");  
    java.io.DataOutputStream dos = new DataOutputStream(fos);  
    double d = 233344.233444;  
    dos.writeDouble(d);  
    dos.close();  
    fos.close();  
    }  
    public static void main(String[] args)throws Exception{  
    System.out.println("begin write a int type to file:'c:/data.dat'");  
    new MyTest().test();  
    System.out.println("end write..");  
    }  
    }  
      
    以下为单元测试代码:  
    import junit.framework.Assert;  
      
      
    import org.junit.Test;  
      
      
      
      
    public class MyTestTest {  
       private MyTest test = new MyTest();  
    @Test  
    public void int2byteTest()  
    {  
    int i = -10101;  
    byte[] bytes = test.int2byte(i);  
    int j = test.byte2int(bytes);  
      
    Assert.assertEquals(i, j);  
    i = 10101;  
    bytes = test.int2byte(i);  
    j = test.byte2int(bytes);  
    Assert.assertEquals(i, j);  
    i = -0x1f1f1f;  
    bytes = test.int2byte(i);  
    j = test.byte2int(bytes);  
    Assert.assertEquals(i, j);  
    i = 0x1f1f1f;  
    bytes = test.int2byte(i);  
    j = test.byte2int(bytes);  
    Assert.assertEquals(i, j);  
    i = 0x1f1f1f1f;  
    bytes = test.int2byte(i);  
    j = test.byte2int(bytes);  
    Assert.assertEquals(i, j);  
    i = -0x1f1f1f1f;  
    bytes = test.int2byte(i);  
    j = test.byte2int(bytes);  
    Assert.assertEquals(i, j);  
    }  
      
    @Test  
    public void int16TobyteTest(){  
    int i = -0x01;  
    byte[] bytes = test.int16Tobyte(i);  
    int j = test.byteToint16(bytes);  
    Assert.assertEquals("-0x01",i, j);  
    i = 0x01;  
    bytes = test.int16Tobyte(i);  
    j = test.byteToint16(bytes);  
    Assert.assertEquals("0x01",i, j);  
    i = -0x0101;  
    bytes = test.int16Tobyte(i);  
    j = test.byteToint16(bytes);  
    Assert.assertEquals("-0x0101",i, j);  
    i = 0x0101;  
    bytes = test.int16Tobyte(i);  
    j = test.byteToint16(bytes);  
    Assert.assertEquals("0x0101",i, j);  
    }  
      
    @Test  
    public void long2byteTest(){  
      long l = -0x01;  
      byte[] bytes = test.long2byte(l);  
      long j = test.byte2long(bytes);  
      Assert.assertEquals("-0x01",l, j);  
      l = 0x01;  
      bytes = test.long2byte(l);  
      j = test.byte2long(bytes);  
      Assert.assertEquals("0x01",l, j);  
      l = -0x0101;  
      bytes = test.long2byte(l);  
      j = test.byte2long(bytes);  
      Assert.assertEquals("-0x0101",l, j);  
      l = -0x0101;  
      bytes = test.long2byte(l);  
      j = test.byte2long(bytes);  
      Assert.assertEquals("-0x0101",l, j);  
    }  
      
    @Test  
    public void float2byteTest()  
    {  
    float f = 233344.233444f;  
    byte[] bytes = test.float2byte(f);  
    float j = test.byte2float(bytes);  
    Assert.assertEquals(f, j);  
    }  
      
        @Test  
    public void double2byteTest(){  
    double d = 233344.233444;  
    byte[] bytes = test.double2byte(d);  
    double j = test.byte2double(bytes);  
    Assert.assertEquals(d, j);  
    }  
    }  

     

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值