java byte 与 binary 转换
来源:互联网 发布:在线网络理财产品好么 编辑:程序博客网 时间:2024/06/15 05:46
- 在写通讯程序时,有时需要解析二进制数据流,可能会遇到java数值类型与二进制byte数组的类型转换问题。因此,笔者提供下面代码实例,供大家需要时参考。
- 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);
- }
- }
阅读全文
0 0
- java byte 与 binary 转换
- java byte 与 binary 转换
- java int 与 byte转换
- JAVA String与byte转换
- java byte数组与int,long,short,byte转换
- java byte数组与int,long,short,byte转换
- Java中String与byte[]的转换
- java文件与byte[]的转换
- Java中String与byte[]的转换
- java 基本类型与byte[]相互转换
- java中string与byte[]的转换
- Java 十六进制字符与byte数组转换
- java中byte与十六进制串转换
- Java String与Byte的转换
- Java中String与byte[]的转换
- java byte 与int的互相转换
- Java byte数据类型详解与转换
- java中string与byte[]的转换
- KDD基准系统描述
- NOIP2017 划水总结
- vue2.0项目中的函数封装和引用。演示通过封装jsonp方法获取QQ音乐数据。
- Spring强制使用CGLIB代理事务
- 电脑内存与地址位数的关系
- java byte 与 binary 转换
- 几种统计字符串个数的方法
- 【云星数据---Apache Flink实战系列(精品版)】:Apache Flink批处理API详解与编程实战019--DateSet实用API详解019
- 选 Python还是Java?
- 关于Comparable与Comparator的区别
- 反编译工具的使用
- 在Mac OS上用virtualenv安装 tensorflow出现的问题(一)
- 解决问题RuntimeError: Unexpected version found while deserializing dlib::shape_predictor.
- Quartz-SchedulerListener解读